【问题标题】:Kill my application during uninstall在卸载期间杀死我的应用程序
【发布时间】: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


    【解决方案1】:

    我有几个想法,即:

    • 使用 EventWaitHandles,它允许进程相互通信,并将您的愿望委托给 app.exe。然后,您的 app.exe 可以根据需要终止。这是干净的解决方案,应该是首选。

    如果您出于某种原因决定杀死应用程序,就像您根本不关心世界上的任何事情一样,那么您可以:

    基本上你可以做很多骇客技巧来杀死应用程序。例如使用 WiX Burn 并要求管理权限,然后做你的事。我会选择解决方案#1(创建自己的机制)

    顺便说一句,如果您在 WiX 中使用 ServiceControl 元素,它会在重新安装/卸载之前停止服务。您可以挂接到服务中的 OnStop() 方法并在那里杀死您的 App.exe。如果您已将 Service 设置为 App.exe 父级,则应该有任何子进程与父级一起死亡的标志。

    【讨论】:

    • 出于安全原因,我更喜欢“像我不关心其他任何事情一样”杀死该应用程序。从一开始就以管理员身份运行安装程序可以解决我的问题,但到目前为止,第二个解决方案对我不起作用 - wix 正常启动并仅在设置期间请求提升(在未能终止进程并让我知道之后)需要重新启动)。我将尝试更多地使用解决方案 #2,看看我是否可以让它发挥作用。
    • 好吧,让其他应用程序杀死你的应用程序已经不安全了。想象一下您的软件在做某事,但它会无缘无故地被杀死。这是自找麻烦。
    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多