我可以停止IIS吗?

时间:2009-07-28 20:40:51

标签: c# .net iis configuration

在.NET Windows应用程序中修改ASP.NET应用程序使用的远程计算机配置文件。但是,我一直收到错误:

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文件的方法是否有意义?

(注意,我正在使用正则表达式搜索和替换文件来修改;这是一个问题吗?)

7 个答案:

答案 0 :(得分:8)

你应该可以做这样的事情。我没有窗口,所以我无法检查服务的确切名称,但我认为它是“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

来自命令行或代码中的过程

答案 1 :(得分:4)

奇怪。不应该单独锁定.config文件 但要回答你的问题,你也可以使用net命令:

net stop w3svc

停止www服务,

net start w3svc

再次启动它。

您也可以按照@monkeyp

的描述以编程方式执行此操作

注意我建议不要这样做,并首先尝试确定(并解决)@RichardOD所描述的锁定原因。

答案 2 :(得分:2)

您可以使用IISRESET /STOP命令。

如果输入IISRESET /?您将获得其他可用选项的列表。

[编辑:将“/ STOP”开关作为进程'startinfo对象的arguments属性传递。)

答案 3 :(得分:2)

应该是“iisreset / STOP”来停止服务,然后“iisreset / START”重启它们。

答案 4 :(得分:2)

使用wholockme or unlocker之类的工具查找锁定的根本原因。

更新 - 另一个选择是使用Process Explorer(感谢fretje) - 这是一个很好的选择,因为许多开发人员在他们的PC上都有这个实用程序。

答案 5 :(得分:0)

您通常可以回收或停止/启动Application Pool IIS正在运行,而不是完全重新启动IIS。

答案 6 :(得分: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);