试图让一个 wix 安装程序终止一个进程,从我在网上找到的内容来看,这似乎是要走的路:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="WindowsFolder" Name="WINDOWS"/>
<Property Id="QtExecCmdLine" Value='"[WindowsFolder]System32\taskkill.exe" /F /IM Foo.exe'/>
<CustomAction Id="KillTaskProcess" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="ignore"/>
我遇到的问题是构建项目会抛出以下错误,提示 windows 属性:
The 'QtExecCmdLine' Property contains '[WindowsFolder]' in its value which is an illegal reference to another property. If this value is a string literal, not a property reference, please ignore this warning. To set a property with the value of another property, use a CustomAction with Property and Value attributes.
我试过 [#WindowsFolder],它消除了错误,但没有解决问题。 使用完整地址 (C:\Windows\System32\taskkill.exe) 代替该值确实有效,但我想避免这种情况。
最佳答案
我认为您不能像现在这样引用目录(例如“[WindowsFolder]”)。这种类型的注释用于引用属性的值。
WindowsInstaller 确实已经提供了一个公共(public)属性,它表示任何给定系统上的系统文件夹。
您可以使用 [SystemFolder]在 32 位机器上获取 c:\Windows\System32(注意在 64 位机器上这将为您提供 c:\Windows\SysWow64)。
因此,在 64 位机器上你可以使用 [System64Folder]这会给你 c:\Windows\System32
你的代码看起来像
<Property Id="QtExecCmdLine" Value='"[SystemFolder]taskkill.exe" /F /IM Foo.exe'/>
或者
<Property Id="QtExecCmdLine" Value='"[System64Folder]taskkill.exe" /F /IM Foo.exe'/>
我在同时支持 32 和 64 位机器的安装包中执行了类似的操作。这使事情稍微复杂化了。
为了解决这个问题,我会尝试使用您的代码执行以下操作:
<Property Id="TASKKILLFILEPATH"/>
<Property Id="QtExecCmdLine" Value='"[TASKKILLFILEPATH]" /F /IM Foo.exe'/>
然后,添加一个自定义 Action 来正确设置任务kill文件路径
<CustomAction Id='SetTASKKILLFILEPATH32' Property='TASKKILLFILEPATH' Value='[SystemFolder]\taskkill.exe' Return='check' />
<CustomAction Id='SetTASKKILLFILEPATH64' Property='TASKKILLFILEPATH' Value='[System64Folder]\taskkill.exe' Return='check' />
在 InstallExecuteSequence 中,您可以根据系统类型运行适当的自定义操作:
<InstallExecuteSequence>
<Custom Action='SetTASKKILLFILEPATH64' After='AppSearch'>VersionNT64</Custom>
<Custom Action='SetTASKKILLFILEPATH32' After='AppSearch'>Not VersionNT64</Custom>
</InstallExecuteSequence>
BTW VersionNT64 是另一个 WindowsInstaller 提供的属性。
这可能有点矫枉过正,我希望有其他人可能会分享的更简单的方法,但我知道这是一个可行的解决方案。希望这至少能引导您正确的方向。
关于wix - WindowsFolder 属性作为 exe 地址的一部分不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24953857/