我在 Windows XP 上使用 Wise Package Studio 7.0 SP2。
我有一个 MSI 包装的 EXE 安装,它可以愉快地安装一些文件,然后运行安装中的其中一个文件,我们可以将其称为 app.exe。
因此,在 MSI 编辑器的“执行延迟”选项卡上,我必须添加以下行:
If Not Installed then
Execute Installed Program app.exe (Action)
End
这确保了我的 app.exe 能够运行only在安装过程中,而不是在修改/维修/删除过程中。当 app.exe 运行时,它会方便地将自身添加到系统托盘中。
我正在寻找在移除过程中起到相反作用的东西。我想停止 app.exe 进程,从而将其从系统托盘中删除。
目前,我的删除操作删除了所有文件,但 app.exe 仍然运行并仍然显示在系统托盘中。我考虑过添加条件语句:
If REMOVE~="ALL" then
*remove the app from the systray!*
End
条件语句只会让我在删除时执行某些操作,但是我不确定实际终止进程的最佳方法。是否有一个 MSI 命令可以让我执行此操作?我应该编写自己的 .exe 来做到这一点吗?
6 个月前,我们使用 VBScript 操作来做同样的事情,然后就在 SP3 发布的时候,objProcess.Terminate() 函数拒绝在某些机器上工作。无论我们做什么,它都冻结了。我们大约 10% 的测试机器上发生了这种情况,因此我们被迫寻找替代解决方案(谁知道它可能冻结了多少客户!)
我的第一个发现是内置的(自 Windows 2000 起)命令 TASKKILL
例如:TASKKILL /IM app.exe /F
但由于这似乎使用了与我们在 VBScript 中使用的类似的方法来终止进程,因此该方法也会失败。
所以现在我们使用的是pskill.exe
使用来自 sysinternals 的工具,您需要使用命令行开关来抑制许可协议提示,但除此之外,这是我发现的杀死正在运行的 EXE 的最简单的方法。
当然,如果您碰巧了解一点 C++,最好的解决方案是构建您自己的 EXE 或 DLL 来执行此操作;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)