2013-05-28 3 views
1

У меня есть программа, которая создаст новый веб-сайт в IIS 6. Как мне выполнить выполнение команд до тех пор, пока оно не закончится. В настоящее время он не ждет, поэтому сайт не создается.Выполнение команды из C# и ожидания завершения завершения

Я не могу использовать файл .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(); 
+3

WaitForExit? http://msdn.microsoft.com/en-us/library/system.diagnostics.process.waitforexit.aspx –

+0

У меня есть WaitForExit. Но это не работает. Нужно ли что-то делать с фоновым потоком? – Butters

ответ

0

Вы хотите запустить свои команды в основной теме? Если да, не хотите ли вы дождаться окончания фоновой нити?

+0

Я не хочу запускать свои команды в основном потоке. – Butters

3

Я понял, в чем проблема.

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

Я добавил /C в начале startInfo.Arguments и он работал нормально.

Вот ответ, который сработал.

startInfo.Arguments = @"/C cd %systemroot%\system32" + " & " + @"cscript iisweb.vbs /create " + DirectoryPath + " " + SiteName + " /ap " + AppPoolName + " /b " + PortNumber + " & " + "exit"; 
Смежные вопросы