在.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文件的方法是否有意义?
(注意,我正在使用正则表达式搜索和替换文件来修改;这是一个问题吗?)
答案 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);