WIX - Выполнение условного теста со свойством WPF - PullRequest
0 голосов
/ 24 сентября 2018

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

<Product
   ...
   <Property Id="UNINSTALLDB" Value="0"/>

   <DirectoryRef Id="dbFolder">
      <Component Id="CMP_RemoveDB" Guid="*">
        <sql:SqlDatabase Id="SqlDatabase" Database="MyDB" 
            Server=".\SQLEXPRESS" DropOnUninstall="yes"/>
        <RemoveFile Id="RemoveMDFFile"  Name="MyDB.mdf" On="uninstall"/>
        <RemoveFile Id="RemoveLDFFile" Name="MyDB_log.ldf" On="uninstall"/>
     </Component>
   </DirectoryRef>

   <Feature Id="DBRemoval"  Level="0">
      <Condition Level="1">UNINSTALLDB = 1</Condition>
      <ComponentRef Id="CMP_RemoveDB"/>
   </Feature>
</Product>

<Bundle
   ....
   <Variable Name="firstVar" Type="string" Value="1"/>
   <Variable Name="secondVar" Type="string" Value="[RemoveDB]"/>

   <Chain
      ...
      <MsiPackage SourceFile="$(var.MSI.TargetDir)Setup.msi">
         <MsiProperty Name="INSTALLFOLDER" Value="[InstallDir]"/>  
         <MsiProperty Name="UNINSTALLDB" Value="[firstVar]"/>
      </MsiPackage>
   </Chain>
</Bundle>

Установка UNINSTALLDB на firstVar всегда удаляет базу данных, как и ожидалось.Поскольку я хочу предоставить пользователю возможность удалить базу данных, у меня есть свойство WPF с именем RemoveDB.Я установил это в "1" в коде C # и назначил его для secondVar.Когда я меняю MSIProperty, заменяя firstVar на secondVar, база данных не удаляется.Это подразумевает, что RemoveDB не "1".Я жестко запрограммировал значение в C # следующим образом.

BootstrapperApplication.Engine .StringVariables ["RemoveDB"] = "1";

Сообщения файла журнала

При использовании firstVar или secondVar журнал Wix сообщает:


Инициализация строковой переменной 'firstVar' в значение '1'

Инициализация строковой переменной 'secondVar' в значение '[RemoveDB] '

и более поздние версии

Установка строковой переменной' RemoveDB 'в значение' 1 '

Планирование начала, 3 пакета, действие: удаление

Inжурнал MSI при использовании firstVar или secondVar:

Командная строка: ARPSYSTEMCOMPONENT = 1 MSIFASTINSTALL = 7 UNINSTALLDB = 1 INSTALLFOLDER = ...

Изменение свойства UNINSTALLDB.Текущее значение равно 0.Его новое значение: '1'.

и ближе к концу

Свойство (S): UNINSTALLDB = 1


Единственное существенное отличие, которое я вижу в MSIфайл журнала между firstVar и secondVar - это файл журнала firstVar, показывающий удаление базы данных.

Я пытался установить RemoveDB в качестве числового и пользовательского действия, но безуспешно.Любые предложения относительно того, почему есть разница между установкой UNINSTALLDB с firstVar или secondVar?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...