2009-07-28 141 views
3

在.NET Windows應用程序中修改ASP.NET應用程序使用的遠程計算機配置文件。不過,我不斷收到錯誤:我可以停止IIS嗎?

System.IO.IOException: The process cannot access the file '[file name]' because it is being used by another process.

現在,這可能不是問題,但我盤算,如果我能停止IIS,那麼我可以修改本機配置文件(沒有得到除外),然後我可以使用此代碼重新啓動IIS:

Process proc = new Process(); 
      proc.EnableRaisingEvents = false; 
      proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      proc.StartInfo.FileName = "iisreset"; 
      proc.StartInfo.Arguments = serverName; 
      try 
      { 
       proc.Start(); 
       proc.WaitForExit(); 
       ... 

1)是否有辦法阻止IIS 沒有重新啓動它,和2)能源部這種方法來改變server.config文件甚至有意義?

(注意,我修改與正則表達式的文件搜索和替換,這是一個問題嗎?)

+2

1)在命令行鍵入`IISRESET /?` – 2009-07-28 20:42:08

+0

對不起,我忘了指定它是遠程計算機配置。 – thewillcole 2009-07-28 20:45:36

回答

7

你應該可以做這樣的事情。我沒有窗口,所以我無法檢查服務的確切名稱,但我認爲它是「IISADMIN」或「w3svc」。請記住,這應該是服務名稱,而不是您在服務控制面板中看到的顯示名稱。

ServiceController controller = new ServiceController(); 
controller.MachineName = "."; // or the remote machine name 
controller.ServiceName = "IISADMIN"; // or "w3svc" 
string status = controller.Status.ToString(); 

// Stop the service 
controller.Stop(); 

// Start the service 
controller.Start(); 

您還可以使用

net stop w3svc

net stop IISADMIN

從命令行或在你的進程在你的代碼

+2

我認爲'w3svc'在這種情況下更好,因爲那樣只會停止Web服務器。停止IISADMIN也會阻止其他服務,如ftp和smtp。 – fretje 2009-07-28 20:48:37

2

可以使用IISRESET /STOP命令。

如果你輸入IISRESET /?你會得到其他可用選項的列表。

[編輯:通過 「/ STOP」 開關作爲進程的StartInfo的對象的參數屬性]

4

奇怪。一個.config文件不應該被專門鎖定。
但是,爲了回答你的問題,你也可以使用net命令是:

net stop w3svc 

停止WWW服務,並

net start w3svc 

再次啓動它。

您也可以通過@monkeyp

注意由@RichardOD描述我會建議反對這一點,首先嚐試確定(和解析)鎖的原因說明這樣做編程。

0

您可以經常只是回收或停止/啓動Application Pool IIS正在運行,而不是完全重新啓動IIS。

2

應該用「iisreset/STOP」來停止服務,然後用「iisreset/START」重新啓動它們。

2

使用像wholockme or unlocker一個工具來查找根本原因的鎖定。

更新 - 另一個選項是使用Process Explorer(謝謝fretje) - 這是一個很好的選擇,因爲許多開發人員在他們的PC上都有這個工具。

0
Using System.Diagnostics; 

//to stop ISS 
ProcessStartInfo startInfo = new ProcessStartInfo("iisreset.exe", " /stop"); 
System.Diagnostics.Process.Start(startInfo); 

//to start ISS 
ProcessStartInfo stopInfo = new ProcessStartInfo("iisreset.exe", " /start"); 
System.Diagnostics.Process.Start(stopInfo); 
相關問題