GetStartupInfo () отличается в зависимости от проводника, из которого запускается приложение - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть приложение C ++, которое запускает еще одно с CreateProcess ().Я заполняю данные STARTUPINFO с помощью GetStartupInfo () раньше.Вот код:

STARTUPINFOA si;
PROCESS_INFORMATION pi;

GetStartupInfoA( &si );

cout << si.dwFlags << endl;
cout << si.hStdError << endl;
cout << si.hStdInput << endl;
cout << si.hStdOutput << endl;

Я использую Win7 / x64, SP1, VS2005, ICC 9.1 (Intel)

Когда я запускаю приложение из CubicExplorer , оно возвращает:

dwFlags = 1

hStdError = 0xffffffffffffffff

hStdInput = 0xffffffffffffffff

hStdOutput = 0xffffffffffffffff

1017 (и 1016 * * 1017 (1016 * * 1017)Приложение, которое я начинаю с CreateProcess, с помощью этого STARTUPINFO работает.)

Когда я запускаю приложение из стандартного Windows Explorer , оно возвращает:

dwFlags = 1025 (0x401)

hStdError = 0x0000000000000000

hStdInput = 0x0000000000000000

hStdOutput = 0x0000000000010001

(... и CreateProcess не работает с ошибкой ACC).1033 * Мой вопрос: поскольку единственное отличие состоит в том, что приложение запускается из другого проводника папок ( Windows Explorer против Cubic Explorer ), что может выдавать эту различную информацию?

1 Ответ

3 голосов
/ 09 сентября 2011

Полученная вами запись STARTUPINFO поступает от вызова CreateProcess, который запустил вашу программу. Две разные и полностью независимые программы назывались CreateProcess, и они, очевидно, решили заполнить запись STARTUPINFO по-разному. Ничего примечательного в этом нет.

Кстати, если dwFlags не включает STARTF_USESTDHANDLES, читать поля hStdX бессмысленно.

Я рекомендую , а не , просто отправив свои собственные параметры запуска в следующую программу. Вместо этого явно заполните поля запуска, необходимые для следующей программы. Вот почему ты знаешь, что получаешь.

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