我工作在.net 3.5和我有停止使用ServiceController的一些服務的問題。我搜索整個互聯網,我發現沒有解決我的問題;)不能在.NET中停止使用的ServiceController服務3.5
我是這樣做的:
using (ServiceController service = new ServiceController("Service")) { try { TimeSpan timeout = TimeSpan.FromSeconds(timeoutSeconds); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
我等待着,直到我的服務停止。然後我想替換它的庫(更新它)。拋出異常:
UnauthorizedAccessException 異常詳細信息:System.UnauthorizedAccessException:拒絕訪問路徑'blablabla'。
我敢肯定,我有機會獲得這條路,因爲我跑我的應用程序作爲管理員。
當這段代碼執行有趣的是,這個服務從當前服務列表(在任務管理器)消失。所以它實際上停止了它,但是一些線程仍然使用它,所以我不能移動任何服務的文件。即使我嘗試自己移動文件(我進入Service目錄並嘗試使用鼠標移動文件),我無法做到這一點。但是,當我手動停止服務(任務管理器和「結束任務」)時,我可以對其文件進行任何操作。那麼,停止使用C#代碼(使用ServiceController)並使用任務管理器停止它有什麼區別?
我不知道,如果它是重要的,但我運行此應用程序(這個服務)Windows Server 2008上的虛擬盒。 (我需要在其他機器上運行它,然後在我的電腦上運行它)。
任何想法我怎麼能解決這個問題? ;)
感謝您的幫助。
最良好的祝願, 皮特。
之所以用'任務Manager'是因爲它已經有一個管理員令牌可以停止代碼。爲了讓您的應用程序操作'Service',您需要模擬或驗證您的應用程序是否處於適當的管理員級別。 這可以用'Windows主體Assembly'來完成。 您的其他選擇是啓動'Process'將運行的'淨Stop'管理員命令提示符命令停止'Service'。然後在完成它的任務後再次調用'Process'以重新開始。 – Greg 2013-02-09 00:21:01
您沒有停止使用任務管理器的服務,你*把它打死了*。巨大差距。 – 2013-02-09 01:32:49
@格雷格我想過這個問題,但我也認爲,如果我們有類似的ServiceController我就能用它來控制我的服務,但在這種情況下,我必須做的,你寫的,並使用「淨停止」 感謝所有的答案! – 2013-02-09 08:27:39