2009-07-28 104 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); 
相关问题