在C#中停止IIS

时间:2014-09-24 15:44:13

标签: c# multithreading iis

我正在使用C#自动执行某些程序

  1. 启动IIS
  2. 在特定端口上的特定地址打开Internet Explorer
  3. 用户关闭浏览器
  4. 停止IIS
  5. 我被困在第四步,因为我必须在之后的其他程序中使用相同的端口。

    我创建了一个将被调用以启动IIS的线程:

    public class MyThread
    {
        //thread to start IIS
        public static void Thread1()
        {
            //thread for running IIS
            using (Process proc = new Process())
            {
                proc.StartInfo.FileName = @"C:\Program Files\IIS Express\iisexpress.exe";
                proc.StartInfo.Arguments = @"/path:""c:\windows\Microsoft.NET\Framework\v4.0.30319\ASP.NETWebAdminFiles"" /vpath:/asp.netwebadminfiles /port:61569 /clr:4.0 /ntlm";
                //proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.Start();
                proc.WaitForExit(); 
                //output from the process run
                Console.Out.WriteLine(proc.StandardOutput.ReadToEnd());
            }
        }
    }
    

    打开IE的代码是:

    Thread thread1 = new Thread(new ThreadStart(MyThread.Thread1));
            thread1.Start();
            using (Process proc1 = new Process())
            {
                proc1.StartInfo.FileName = @"C:\Program Files\Internet Explorer\iexplore.exe";
                proc1.StartInfo.Arguments = @"http://localhost:61569/asp.netwebadminfiles/default.aspx?applicationPhysicalPath=C:\Users\"+userName+@"\Documents\Visual Studio 2013\Projects\NN\&applicationUrl=/";
                proc1.StartInfo.UseShellExecute = false;
                proc1.StartInfo.RedirectStandardOutput = true;
                proc1.StartInfo.CreateNoWindow = true;
                proc1.Start();
                proc1.WaitForExit();
                //output from the process run
                Console.Out.WriteLine(proc1.StandardOutput.ReadToEnd());
            }
    

    我试图创建另一个线程来杀死/中止原始线程,但这不起作用。我也试着写" Q"在控制台的末尾,但也没有做任何事情。

    关于浏览器关闭时如何停止IIS的任何想法?

1 个答案:

答案 0 :(得分:1)

你不应该杀死停止IIS的进程。拉下它下面的地毯并不是一件好事,而且,如果服务有任何重启动作,那么它将立即重新启动。

使用ServiceController(http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(v=vs.110).aspx)启动和停止相应的服务。

还有其他方法可以控制IIS,例如使用WMI(我认为现在已弃用),但是使用ServiceController应该足以完成任务。