У меня есть пользовательский загрузчик 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?