代码之家  ›  专栏  ›  技术社区  ›  Praveen M

在WIX中强制终止windows服务

  •  0
  • Praveen M  · 技术社区  · 6 年前

    我有windows服务,它将作为wix安装的一部分进行安装。问题是,当前服务正在生产中,由于服务on-stop方法中的一些代码编写不好,所以它并没有响应stop。

    因此,下次用户尝试安装升级版本时,安装将失败,因为wix尝试停止服务时,服务将永远不会停止。

    有没有什么方法可以让我知道wix是否花费了太多的时间来卸载,如果我收到通知,我可以终止进程?

    还有,有什么方法可以根据产品版本终止流程吗?

    谢谢

    2 回复  |  直到 6 年前
        1
  •  0
  •   Praveen M    6 年前

    经过一段时间的挖掘,我找到了解决这个问题的方法。

    我正在创建新的C#自定义操作项目,并在InstallInitialize之前对操作排序。

    在我的C#自定义操作方法中,我通过使用 FileVersionInfo。GetVersionInfo(文件路径);

    然后,我使用想要检查的版本进行检查,如果条件匹配,我将使用

     foreach (Process proc in Process.GetProcessesByName("ProcessName"))
     {
          proc.Kill();
          session.Log("Service Killed");
     }
    

    为了实现这一点,Wix工具集v3。11.1必须事先安装

        2
  •  0
  •   Stein Åsmul    3 年前

    也许可以试试这个: newer answer


    我不应该回答这个问题,因为我已经很久没有处理过这样的事情了,但见鬼,让我们试试。

    1. CloseApplication元素 :也许我会试试 WiX's CloseApplication Element 第一我怀疑它是否适用于服务,但这是我能想到的最方便的方法。
    2. 系统内部PsKill :Mark Russinovich的 PsKill 值得一试。我认为他的工具是可再分发的,所以你可以将它们包含在你的设置中,而且它们总是很好的。您必须从提升的延迟模式自定义操作调用它,这通常比使用内置WiX构造更复杂。
    3. 任务终止 :还有内置 Taskkill -我从来没有用过。 Suggested use with the sc tool

    我想强调的是,我还没有实际测试这些工具来终止服务,现在我没有时间这么做。排序可能存在问题 StopServices 可以在 CloseApplication WiX的自定义操作计划运行。请检查 InstallExecuteSequence 使用 Orca (朝下)编译后看看是否是这样。