【问题标题】:Wix - How to kill any process forcefully through custom action?Wix - 如何通过自定义操作强行终止任何进程?
【发布时间】:2015-02-15 16:01:42
【问题描述】:

我已创建并安装了 msi,但在卸载过程中遇到问题。我想在通过自定义操作卸载之前强制关闭应用程序 - wix 我已经搜索了很多,但没有找到任何解决方案。 我想要一个类似的解决方案。

<Property Id="QtExecCmdLine" Value='"[SystemFolder]taskkill.exe" /F /IM ConfigurationManager.exe     /t'/> 
<CustomAction Id="StopUserExe" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate"     Return="ignore"/>

<InstallExecuteSequence>
  <Custom Action='StopUserExe' Before='RemoveFiles'></Custom>
</InstallExecuteSequence>

【问题讨论】:

  • 上述解决方案有什么问题?
  • 它不会退出我的应用程序。

标签: wix windows-installer uninstallation custom-action


【解决方案1】:

在您的自定义操作中,您可以枚举进程 (EnumProcesses()) 并为需要的进程调用 TerminateProcess()。

【讨论】:

    【解决方案2】:

    你试过Taskkill吗?

    例子:

    <CustomAction Id="TaskKill" Execute="deferred" ExeCommand="taskkill /f /im notepad.exe" />
    

    【讨论】:

    • 我试过这个。当我手动执行 taskkill 命令时,它会给出“拒绝访问”错误。但是当我以管理员身份运行 cmd.exe 时,命令执行成功。我不知道如何在 CstomAction 命令中赋予管理权限。
    • .msi 包应该在某个时候自动请求提升。请注意CustomAction element 中的“执行”枚举,还要注意InstallExecuteSequence element。您必须在安装程序提升后执行,例如&lt;InstallExecuteSequence&gt; &lt;Custom Action="TaskKill" After="InstallInitialize"&gt;1&lt;/Custom&gt; &lt;/InstallExecuteSequence&gt;
    • 它的工作。从昨天开始,我一直在尝试解决这个问题。非常感谢:)
    • 我也在做同样的事情,但它对我不起作用还有其他方法吗?
    • 据我所见,这不再起作用。当 MSI 尝试运行它时,我也会收到错误消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多