使用 'if exist' 在 Wix 中执行 CustomAction

Executing a CustomAction in Wix with 'if exist'

您好,我想在安装我的程序时执行以下 CustomAction:

<!--Include the custom action for overwrite Client.config-->
    <CustomAction Id="SetCmdLineParams" Property="QtExecCA" Value='if exist &quot;[CURRENTDIRECTORY]\Client.config&quot; ("xcopy" /Y &quot;[CURRENTDIRECTORY]\Client.config&quot; &quot;[INSTALLFOLDER]&quot;)' Execute="immediate" />
    <CustomAction Id="QtExecCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>

    <!--Include the InstallExecuteSequence for overwrite Client.config-->
    <InstallExecuteSequence>
      <Custom Action="SetCmdLineParams" After="CostFinalize"/>
      <Custom Action="QtExecCA" Before="InstallFinalize" />
    </InstallExecuteSequence>

不幸的是,这不起作用,因为:CAQuietExec:命令字符串必须以引用的应用程序名称开头。

但是如果我引用"if exist",那么这个命令就不起作用了。我现在可以做什么?

if exist 是 cmd.exe 的一个特征。您需要先说 cmd /c 或创建一个 .bat 文件并调用它。

老实说,这是非常脆弱的代码。对于一个 CURRENTDIR 并不总是如您所想的那样。您应该编写一个 C++ 或 C# 自定义操作,使用 OriginalDatabase 属性 获取 MSI 运行 的位置,并从那里复制配置文件。

我过去非常成功地使用的另一种方法是编写一个实用程序,通过将用户提供的配置文件嵌入其中来转换种子 MSI。现在部署故事被简化了。