2010-02-01 3 views
1

Я пытаюсь использовать CreateProcess для запуска скрипта powershell из моего приложения.CreateProcess, процесс не прерывается при перенаправлении std out/in/err

Я использовал пример Microsoft (http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx), чтобы создать дочерний процесс и перенаправить стандартные каналы out/in/err.

Остается только решить, почему дочерний процесс (powershell) не завершается после выполнения команды.

Если я выполняю процесс powershell (с помощью команды) cmd.exe, он выполняет и завершает работу, закрывая процесс.

Единственный способ закрыть процесс powershell прямо сейчас - запустить TerminateProcess на ручке, но это похоже на последнее средство.

+0

Хотите добавить, что я тестирую это под Vista, с администратором priv. – user233726

ответ

2

Является ли ваш родитель полностью прочитанным стандартным ребенком? Если вы не прочтете все это, я верю, что ребенок будет висеть. Кроме того, если сценарий ожидает ввода, вам придется написать что-то в stdin ребенка, иначе он будет зависать. Вы можете приложить windbg к ребенку и посмотреть, где он висит; возможно, это даст вам представление о том, где искать.

0

В Linux, если не перенаправлено полностью, выходные данные и родительский процесс убиты, дочерний процесс также убит. Таким образом, вы проверяете документацию Windows, ссылаясь на перегруппировку дочернего процесса, когда родитель убивается.