Exemplo n.º 1
0
 /// <summary>
 /// Загрузка в модель с "нуля".
 /// </summary>
 /// <param name="parameters"></param>
 public void Load(IMspModelLoadingParamters parameters)
 {
   ((MspModel)Model).Load(parameters);
   LoadUpdateComponents();
 }
Exemplo n.º 2
0
        public void Load(IMspModelLoadingParamters parameters)
        {
            // BaseDirectory и TargetDirectory используем только в этом методе, при создании.
              // Это позволит в будущем при необходимости изменять эти имена директорий
              // и поддерживать функциональность старых файлов, так как в них записаны старые
              // пути с которыми они создавались.
              string baseFile = BaseDirectory + "\\" + Path.GetFileName(parameters.PathToBaseFile);
              string targetFile = TargetDirectory + "\\" + Path.GetFileName(parameters.PathToTargetFile);

              // Копируем файлы во временную директорию.
              FileStore.AddFile(parameters.PathToBaseFile, baseFile);
              FileStore.AddFile(parameters.PathToTargetFile, targetFile);

              // Распаковываем файлы.
              // Распакуются там, где находится архив.
              WixProductUpdateInfo baseInfo = WixProductUpdateInfo.Load(Path.Combine(FileStore.StoreDirectory, baseFile));
              WixProductUpdateInfo targetInfo = WixProductUpdateInfo.Load(Path.Combine(FileStore.StoreDirectory, targetFile));

              // Сразу запомним обновляемую информацию в Product.
              MainItem.BaseId = baseInfo.Id;
              MainItem.BaseName = baseInfo.Name;
              MainItem.BaseManufacturer = baseInfo.Manufacturer;
              MainItem.BaseVersion = baseInfo.Version;
              MainItem.BasePath = Path.Combine(BaseDirectory, baseInfo.WixoutFileName);
              MainItem.TargetId = targetInfo.Id;
              MainItem.TargetName = targetInfo.Name;
              MainItem.TargetManufacturer = targetInfo.Manufacturer;
              MainItem.TargetVersion = targetInfo.Version;
              MainItem.TargetPath = Path.Combine(TargetDirectory, targetInfo.WixoutFileName);

              // Добавим файлы в хранилище.
              FileStore.AddFile(Path.Combine(FileStore.StoreDirectory, MainItem.BasePath), MainItem.BasePath);
              FileStore.AddFile(Path.Combine(FileStore.StoreDirectory, MainItem.TargetPath), MainItem.TargetPath);

              // Удалим файлы updzip - больше не нужны.
              FileStore.DeleteFile(baseFile);
              FileStore.DeleteFile(targetFile);

              // Патч разрешено выпускать только при добавленных или измененных компонентах.
              // То есть необходимо получить элементы множества targetInfo, которые
              // отсутствуют в множестве baseFile.
              // Получаем только Component и его наследика DbComponent.
              WixMD5ElementHash[] actuals = targetInfo.Hashes.Except(baseInfo.Hashes).
            Where(v => v.Type == typeof(WixComponentElement).Name
            || v.Type == typeof(WixDbComponentElement).Name).ToArray();

              var updateComponents = from v in actuals
                             select new UpdateComponentInfo { Id = v.Id };
              // Загружаем обновляемы компоненты в модель.
              foreach (var c in updateComponents)
              {
            MainItem.UpdateComponents.Add(c);
              }

              switch (parameters.CreationType)
              {
            case MspCreationTypes.AllInOne:
              LoadAllInOne();
              break;
            case MspCreationTypes.EachInOne:
              LoadEachInOne();
              break;
            case MspCreationTypes.Empty:
              // Ни чего не делаем.
              break;
              }
        }