【问题标题】:Stopping IIS in C#在 C# 中停止 IIS
【发布时间】:2014-11-19 04:45:44
【问题描述】:

我正在使用 C# 来自动化一些程序

  1. 启动 IIS
  2. 在特定端口上的特定地址打开 Internet Explorer
  3. 用户关闭浏览器
  4. 停止 IIS

我被困在第四步,因为之后我必须为其他程序使用相同的端口。

我创建了一个线程,将调用它来启动 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 有什么想法吗?

【问题讨论】:

  • 不完全确定您遇到的问题是什么; IE 关闭时WaitForExit 是否正确返回?我可以问一下你的 IISExpress 是做什么的吗?可能有更直接的方法来做你正在尝试的事情。
  • 假设您的应用程序以提升的权限级别运行,您是否考虑过从您的代码中执行此命令行net stop w3svc /Y
  • iisreset /stopappcmd stop site "sitename"(你没有说 IIS 的哪个版本,后者在 IIS 7+ 中是首选)。

标签: c# multithreading iis


【解决方案1】:

您不应该终止进程来停止 IIS。将地毯拉到它下面并不是一件好事,此外,如果服务有任何重新启动操作,那么它将重新启动。

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

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

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 2011-12-16
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多