![]() |
1
2
6个月前,我们使用vbscript操作来做同样的事情,然后就在sp3发布时,objprocess.terminate()函数拒绝在某些计算机上工作。不管我们做了什么,它都冻结了。这发生在我们大约10%的测试机器上,因此我们不得不找到一个替代的解决方案(谁知道它可能冻结了多少客户!)
我的第一个发现是内置(自Windows2000以来)命令taskkill
如:
所以现在我们使用
当然,最好的解决方案是建立你自己的EXE或DLL来做它,如果你碰巧知道一点C++的话; |
![]() |
2
1
仅仅终止进程是不够的,因为这并不能清除Windows通知区域(但是,当鼠标下一次悬停在上面时,Windows将清除一个没有匹配进程的图标)。然而,突然终止应用程序的另一个原因通常最好保留用于调试。不幸的是,一个更合适的解决方案也更为复杂。您可以在应用程序中创建一个命名事件,并注册一个回调方法,以便在设置该方法时调用。回调将关闭应用程序。然后编写一个自定义操作,设置事件并等待进程终止。 如果您需要支持取消(例如,提示用户有未保存的更改,并决定不取消),您可以使用另一个命名事件来指示这一点,因此自定义操作可能等待进程结束或取消事件(以先发生者为准)。 |
![]() |
3
0
可以将vbscript元素作为自定义操作插入到msi中。像这样的事情应该可以做到:
|
![]() |
4
0
如果你的app.exe是在内部创建的,你可以添加一个命令行,告诉它终止当前正在运行的命令行。当给定该命令行时,它将向该程序的第一个实例发送一条消息或一些东西,告诉它退出,然后挂起等待,直到该程序的第一个实例实际终止。然后,安装程序就可以用kill开关运行程序,并知道当kill开关实例返回时,它的原始实例就不存在了。 |