CreateProcess работает на некоторых компьютерах, а не на других. Зачем? - PullRequest
0 голосов
/ 08 сентября 2011

Я работаю над приложением, которое вызывает другое приложение через 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 Ответ

0 голосов
/ 08 сентября 2011

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

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

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

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