CreateProcess работает на некоторых компьютерах, а не на других. Зачем?

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

STARTUPINFOA si;
PROCESS_INFORMATION pi;
GetStartupInfoA(&si);
memset( &si, 0, sizeof(STARTUPINFOA) );
memset( &pi, 0, sizeof(pi) );
si.cb = sizeof(STARTUPINFOA);
char cmdline[MAX_PATH];
sprintf(cmdline,"\"%s\" %s",AppToCallName,PipeName);
BOOL bRet = CreateProcessA(NULL,cmdline,NULL,NULL,FALSE,CREATE_NEW_CONSOLE|CREATE_BREAKAWAY_FROM_JOB,NULL,NULL,&si,&pi);

На моих компьютерах (пробовал на двух) работает. Для других он возвращает (bRet=)FALSE, затем GetLastError() возвращает 5, что означает ACCESS_DENIED.

Я не могу понять, где проблема. И плохо, что это работает для меня, поэтому я не могу отладить его!

Моя настройка:

  • Win7 Pro 64 бит SP1

  • VStudio 2005 SP1

  • (Используемый компилятор: Intel C++ 9.1

Я буду рад предоставить дополнительную информацию о настройке, если вам это нужно!

Любая идея?

1 ответ

Решение

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

В дополнение к GetLastError когда функция успешно проверяется GetExitCodeProcess так как это, вероятно, будет вашей следующей проблемой.

Также для справки: http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx

Другие вопросы по тегам