WIX-使用WPF属性执行条件测试

时间:2018-09-24 02:34:42

标签: wpf conditional burn wix3.11

我有一个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设置为何有区别的任何建议?

0 个答案:

没有答案