我有一个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总是会按预期方式卸载数据库。因为我想允许用户选择卸载数据库的选项,所以我有一个名为RemoveDB的WPF属性。我在C#代码中将其设置为“ 1”,并将其分配给secondVar。当我更改MSIProperty并将firstVar替换为secondVar时,未卸载数据库。这意味着RemoveDB不是“ 1”。我已经在C#中将值硬编码如下。
BootstrapperApplication.Engine .StringVariables [“ RemoveDB”] =“ 1”;
记录文件消息
使用firstVar或secondVar时,Wix日志状态:
将字符串变量'firstVar'初始化为值'1'
将字符串变量“ secondVar”初始化为值“ [RemoveDB]”
及以后
将字符串变量'RemoveDB'设置为值'1'
计划开始,3个软件包,操作:卸载
在使用firstVar或secondVar的MSI日志中:
命令行:ARPSYSTEMCOMPONENT = 1 MSIFASTINSTALL = 7 UNINSTALLDB = 1 INSTALLFOLDER = ...
修改UNINSTALLDB属性。当前值为“ 0”。它的新值是“ 1”。
并接近尾声
属性:UNINSTALLDB = 1
我在firstVar和secondVar之间的MSI日志文件中看到的唯一重要区别是firstVar日志文件显示了数据库的删除。
我尝试将RemoveDB设置为数字和自定义操作,但没有成功。关于将UNINSTALLDB与firstVar或secondVar设置为何有区别的任何建议?