【发布时间】:2013-11-23 13:26:10
【问题描述】:
我在尝试完成以下任务时遇到了具有挑战性的问题: 我的应用程序安装了一个服务 (watchdog.exe) 和一个 exe 文件 (app.exe)。
安装完成后,服务启动并创建进程“app.exe”。
在卸载过程中我想杀死进程“app.exe”(它在本地系统帐户下运行,所以我必须以管理员身份运行)。
问题 1: 安装程序说它需要重新启动,因为它看到文件“app.exe”在 CostFinalize 阶段被保留(运行)(如果我对检查是否需要重新启动的阶段有误,请纠正我)。在卸载开始时终止该进程会更好。我已经验证,如果在卸载过程中进程没有运行,那么安装不会抱怨需要重新启动。
问题 2: 使用自定义操作来终止进程是有问题的。该操作必须运行提升,但另一方面它必须在 costFinalize 之前运行(否则 - 它回到问题 1)。
如果有任何建议,我将不胜感激。此外,任何替代解决方案(是否有另一种方法可以在安装过程中关闭进程而无需重新启动?)
我现在拥有的自定义操作代码(不好,因为它既不必要地要求重新启动,又由于缺乏权限而无法终止进程):
<InstallExecuteSequence>
<!--<ScheduleReboot After="InstallFinalize" />-->
<Custom Action="MyProcess.TaskKill" Before="InstallValidate"></Custom>
</InstallExecuteSequence>
<!--<Property Id="Net">Net.exe</Property>-->
<Property Id="QtExecCmdLine" Value='"[%SYSTEMROOT]\System32\taskkill.exe" /F /IM App.exe' />
<CustomAction Id="MyProcess.TaskKill"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="immediate"
Return="ignore" />
这是失败的日志:
CAQuietExec:错误 0x80070001:命令行返回错误。 CAQuietExec:错误 0x80070001:CAQuietExec 失败 CustomAction MyProcess.TaskKill 返回实际错误代码 1603(请注意,如果翻译发生在沙箱内,这可能不是 100% 准确) 行动于 18:15:54 结束:MyProcess.TaskKill。返回值 1603。
【问题讨论】:
标签: wix