【发布时间】:2014-11-19 04:45:44
【问题描述】:
我正在使用 C# 来自动化一些程序
- 启动 IIS
- 在特定端口上的特定地址打开 Internet Explorer
- 用户关闭浏览器
- 停止 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 /stop或appcmd stop site "sitename"(你没有说 IIS 的哪个版本,后者在 IIS 7+ 中是首选)。
标签: c# multithreading iis