是否可以在Wix中将批处理文件作为二进制元素类型?

时间:2011-11-23 12:31:14

标签: wix windows-installer

这是我的wix

<Binary Id="B.RenameFiles" SourceFile="RenameFiles.bat"/>
<CustomAction Id="CA.RenameFiles" BinaryKey="B.RenameFiles"
              ExeCommand="RenameFiles.bat" Execute="immediate" Return='ignore'/>

<InstallExecuteSequence>
    <Custom Action="CA.RenameFiles" Before="InstallValidate"></Custom>
</InstallExecuteSequence>

这不起作用并在msi日志中发出错误“无法运行此安装所需的程序”。我不确定这是否可行,或者二进制文件仅用于exe和dll等。

我现在正在这样做的方法是安装bat文件,然后从那里运行它,但是如果我可以将它用作二进制文件而不是将它安装在本地机器上那么它会更整洁。

由于 尼尔

2 个答案:

答案 0 :(得分:5)

Windows Installer自定义操作无法直接启动BAT文件。您需要使用ShellExecute启动BAT的自定义操作。

因此,您无法将BAT用作二进制自定义操作。

答案 1 :(得分:2)

同意Cosmin,您无法从二进制文件执行BAT,但是您可以在安装过程中随时使用“CMD.exe / C”自定义操作启动它(几乎),甚至可以隐藏它(不使用cmd)。 exe窗口),即对于defored CA,可以使用:

<CustomAction Id="Set_CA_HiddenBAT" Property="CA_HiddenBAT" Value="&quot;cmd.exe&quot; /c &quot;[DirectoryWhereBatFileInstalled]Your.bat&quot;" />
<CustomAction Id="CA_HiddenBAT" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="yes" />

或者如果你想要它可见:

<CustomAction Id="CA_LaunchBAT" Directory="DirectoryWhereToExecute" ExeCommand="CMD.exe /c &quot;[DirectoryWhereBatFileInstalled]Your.bat&quot;" Return="ignore" />

注意:请记住在InstallFiles操作之后运行CA_HiddenBAT / CA_LaunchBAT并将WixUtilExtension添加到.wixproj:

<LinkerAdditionalOptions>-ext WixUtilExtension</LinkerAdditionalOptions>
<CompilerAdditionalOptions>-ext WixUtilExtension</CompilerAdditionalOptions>

还有一种方法可以在InstallFile操作之前启动BAT,但这很棘手,如果您需要,请告诉我。