从C#执行命令并等待完成执行

时间:2013-05-28 19:50:36

标签: c# cmd iis-6

我有一个程序将在IIS 6中创建一个新网站。 如何让我执行命令等到它完成。 目前它不等待,因此网站不会被创建。

我无法使用.bat文件,因为提供了 DirectoryPath SiteName AppPoolName PortNumber 通过在运行应用程序时使用。

以下代码在后台线程上执行,而不是在主线程上执行。

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = Environment.SystemDirectory + "/cmd.exe";
startInfo.Arguments = @"cd %systemroot%\system32" + " & " + @"cscript iisweb.vbs /create " + DirectoryPath + " " + SiteName + " /ap " + AppPoolName + " /b " + PortNumber + " & " + "exit";
process.StartInfo = startInfo;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();

2 个答案:

答案 0 :(得分:3)

我弄清楚问题是什么。

startInfo.Arguments = @"cd %systemroot%\system32" + " & " + @"cscript iisweb.vbs /create " + DirectoryPath + " " + SiteName + " /ap " + AppPoolName + " /b " + PortNumber + " & " + "exit";

我在startInfo.Arguments的开头添加了/C,它运行得很好。

这是有效的答案。

 startInfo.Arguments = @"/C cd %systemroot%\system32" + " & " + @"cscript iisweb.vbs /create " + DirectoryPath + " " + SiteName + " /ap " + AppPoolName + " /b " + PortNumber + " & " + "exit";

答案 1 :(得分:0)

你想在主线程上运行你的命令吗?如果是这样,你不想等到后台线程完成吗?