Передача входных данных процессу, созданному CreateProcess () - PullRequest
0 голосов
/ 19 февраля 2011

Как и в заголовке, мне было интересно, возможно ли передать ввод с помощью операторов перенаправления в CreateProcess (). Я пробовал что-то вроде следующего:

CreateProcess(NULL, "%ComSpec% /c c:\\somebatch.bat", NULL, NULL, ...);

, где somebatch.bat содержит c:\app.exe < c:\input.txt, и он не прошел ввод, просто запустил app.exe. На выходе сказано, что:

c:\working_directory> c:\app.exe < c:\input.txt

c:\working_directory>Not enough storage is available to process this command.

(возиться с irpcstack не помогло)

Ребята, вы знаете какой-нибудь магический трюк, который позволил бы мне делать то, что я хочу, не вмешиваясь в трубу hStdInput, которая, честно говоря, хотела избежать. Приветствия.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2011

Есть ли причина, по которой вам нужно CreateProcess?

Функция system использует оболочку по умолчанию (поэтому вам не нужно вводить %ComSpec%), что означает, что перенаправление будет работать нормально. Это также легче в использовании и более портативно. Если вы просто хотите дождаться завершения процесса, рассмотрите возможность использования system.

0 голосов
/ 19 февраля 2011

Прошло много времени с тех пор, как я это сделал, но вы должны установить hStdInput член в STARTUPINFO struct , переданной как следующий за последним аргументом CreateProcess . Я уверен, что нет другого хорошего способа сделать это. Использовать hStdInput довольно просто, откройте файл, который вы хотите использовать в качестве ввода, установите hStdInput на дескриптор файла, создайте процесс и закройте дескриптор.

Возможно, вы сможете открыть входной файл, скопировать дескриптор в стандартный ввод текущих процессов, а затем создать процесс с bInheritHandles, установленным на TRUE. Тогда ваша программа просто получит содержимое файла через stdin. Я никогда не пробовал это в Windows, но на платформах на основе UNIX это обычная практика.

Что касается запуска пакетного файла, прочитайте комментарии в записи MSDN для CreateProcess. Я думаю, что у вас все перепутано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...