2014-09-24 44 views
0

我使用C#在 停止IIS

  • 用戶關閉瀏覽器
  • 停止IIS
  • 特定端口上的特定地址的一些程序

    1. 啓動IIS
    2. 打開Internet Explorer自動化

    我被困在第四步,因爲我必須在其他程序之後使用相同的端口。

    我創建的線程將被調用來啓動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\"[email protected]"\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的任何想法?

    +0

    不完全確定你的問題是什麼; IE關閉時'WaitForExit'是否正確返回?我可以問你的IISExpress是什麼嗎?有可能有更直接的方式來做你正在嘗試的東西。 – 2014-09-24 15:49:45

    +0

    你見過http://stackoverflow.com/questions/4958799/stop-start-an-website-in-iis-6-0-and-7-0-programatically-using-msbuild – artm 2014-09-24 15:50:45

    +0

    假設你的應用程序正在運行提升的特權級別是否考慮過從你的代碼執行這個命令行'net stop w3svc/Y'? – 2014-09-24 15:59:00

    回答

    1

    你不應該殺死阻止IIS的進程。拉下地毯不是一件好事,除此之外,如果服務有任何重新啓動動作,那麼它就會重新開始。

    使用ServiceController(http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(v=vs.110).aspx)來啓動和停止相應的服務。

    還有其他方法可以控制IIS,例如使用WMI(我認爲現在已棄用),但是使用ServiceController應該足以滿足您的任務需求。