2012-07-11 36 views
2

我已經在Windows應用程序的產品工作,在這裏,我需要更換服務EXE(安裝目錄)上層次,所以我不得不停止了服務,並嘗試通過給定的代碼如何修改它停止後的Windows服務exe文件?

  ServiceController service = new ServiceController(servicename); 

      service.Stop(); 

      service.WaitForStatus(ServiceControllerStatus.Stopped); 

      Thread.Sleep(10000); 

      System.IO.File.Copy(application.exe, newapplication.exe, true); 
替換的exe

,其拋出的錯誤如下,

該進程無法訪問文件'C:\ Program Files \ Myapp \ application.exe',因爲它正在被另一個進程使用。

但我確定我的服務沒有任何依賴關係,我找不到在停止後替換服務文件的方式,請幫我解決問題。

回答

0

我不知道它是如何工作在C#,但在C++中,你會明確首先需要能夠去除二進制文件之前註銷從服務控制管理器(SCM)的基礎設施服務。

+0

都能跟得上。停止服務並更換exe是足夠的。 – leppie 2012-07-11 11:45:32

+0

感謝您提供此信息。 .NET隱藏這些底層活動。 – mox 2012-07-11 11:51:16

+0

請留下面向scm的概念,而不是看到,在服務停止後複製粘貼服務文件的主要原因是什麼? – Raja 2012-07-11 12:00:33

0

你不應該需要卸載升級它的服務。我經常通過文件副本升級服務。

嘗試複製文件之前等待長達1分鐘。

看看wyUpdate。 AutoUpdater進程是開源的,你可以看到他們是如何處理它的。 (無論如何我推薦產品)。

這就是說,有沒有真正的魔力吧;如果您在一分鐘左右仍無法複製.exe,則還有其他事情正在進行。