2016-11-17 10 views
0

Вставка флажка в пользовательский интерфейс записи, который устанавливает переменную и работает как элемент условия для InstallCondition. Он работает нормально, устанавливая те определенные пакеты, которые проверяются. Но во время ремонта это условие становится ложным, и вместо переустановки пакетов он удаляет их. Вот как я использовал, Component_1 - это переменная, установленная с помощью флажка.Пакеты MSi удаляются во время ремонта

<MsiPackage SourceFile="DevKit.msi" 
       Vital="no" 
       Compressed="yes" 
       InstallCondition="Component_1" 
       Visible="yes"/> 

Мне нужен правильный способ для InstallCondition, который отлично работает при установке, ремонте и удалении.

ответ

0

Состояние не становится ложным при запуске в режиме ремонта. Скорее, он не настроен на все, что затем интерпретируется как отказ от InstallCondition.

Вам нужно будет реализовать метод «запоминания», был ли установлен продукт.

Вы можете сделать это постоянным способом, который требует, чтобы вы изменили код приложения начальной загрузки, или вы можете сделать это явным образом, который намного проще реализовать.

Явный способ просто устанавливает свойство Component_1 в поиске реестра «существует».

Ваш установщик DevKit.msi должен написать какие-то записи в реестре, чтобы указать, что он установлен. Вы можете сделать поиск в реестре на этом известном записи реестра, чтобы получить значение по умолчанию Component_1

<util:RegistrySearch 
    Id="DevKitInstalled" 
    Root="HKLM" 
    Key="SOFTWARE\DevKit" 
    Format="raw" 
    Value="Installed" 
    Result="exists" 
    Variable="Component_1"/> 

Вы, возможно, придется сделать свой InstallCondition Component_1 = 1, но я не совсем уверен в этом.

Более постоянное исправление для этого - отредактировать OnDetectPackageComplete, чтобы установить соответствующую переменную условия в 1. Я бы предложил вам предоставить все ваши пакеты msi идентификатор и использовать свойства с тем же именем, что и идентификатор, чтобы вы знали, что если есть переменная с тем же именем, PackageID передать из OnDetectPackageComplete, что вы должны установить его в 1.

там также может быть даже более эффективные решения, может быть, кто-то может дать представление в другой ответ =]

 Смежные вопросы

  • Нет связанных вопросов^_^