/// <summary> /// Загрузка в модель с "нуля". /// </summary> /// <param name="parameters"></param> public void Load(IMspModelLoadingParamters parameters) { ((MspModel)Model).Load(parameters); LoadUpdateComponents(); }
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; } }