簡體   English   中英

在WIX中強行終止Windows服務

[英]Kill windows service forcefully in WIX

我有Windows服務,它將作為wix安裝的一部分進行安裝。 問題是,當前服務正在生產中,並且由於服務OnStop方法中的一些編寫較差的代碼而無法響應停止。

因此,下次用戶嘗試安裝升級版本時,安裝將失敗,因為wix嘗試停止服務時服務將永遠不會停止。

有什么方法可以讓我知道wix是否需要花費太多時間進行卸載,並且如果收到該通知,可以終止該進程?

另外,有什么方法可以根據產品版本取消進程嗎?

謝謝

我不應該回答這個問題,因為我處理這樣的東西已經有很長時間了,但是到底,讓我們嘗試一下。

  1. CloseApplication元素 :也許我會先嘗試WiX的CloseApplication元素 我懷疑它是否可以用於服務,但這是我想到的最方便的方法。
  2. Sysinternals PsKill :Mark Russinovich的PsKill值得一試。 我認為他的工具可重新分發,因此您可以將它們包括在您的設置中,並且它們總是很好的。 您必須從提升的,延遲模式的自定義操作中調用它-與使用內置的WiX構造相比,它總是涉及更多。
  3. Taskkill :還有內置的Taskkill-我從未使用過。 建議與sc工具一起使用

我想強調的是,我實際上尚未測試這些工具來終止服務,而且我現在沒有時間這樣做。 排序可能會出現問題,即在計划運行WiX的CloseApplication自定義操作之前,可以計划StopServices 編譯后,請使用OrcaInstallExecuteSequence檢查InstallExecuteSequence以查看是否為這種情況。

經過一段時間的挖掘,我找到了解決方案。

我正在創建新的C#自定義操作項目,並且在InstallInitialize之前對操作進行排序。

在我的C#自定義操作方法中,我正在使用FileVersionInfo.GetVersionInfo(filePath);讀取現有的已安裝文件版本。

然后我正在檢查想要檢查的所需版本,如果條件匹配,我正在使用以下方法終止服務進程

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

為了實現這一點,必須預先安裝Wix工具集v3.11.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM