CreateProcess, вопрос первого параметра - PullRequest
0 голосов
/ 24 января 2011

Я пытаюсь создать процесс с именем s2.exe.Однако я не могу понять, что нужно передать в качестве первого аргумента.Я попытался указать имя и место, где будет расположен процесс, но я получаю «Ошибка 2 запуска CC»Что именно должно идти в первом параметре?(Согласно MSDN это путь к модулю.)

int main()
{
    PROCESS_INFORMATION po;
    STARTUPINFO s;
    GetStartupInfo (&s);

    if(CreateProcess(L"c:/s2", NULL, NULL, NULL,
        false, 0, NULL, NULL, &s, &po) == FALSE)
    {
         printf("Error %d starting CC\n", GetLastError());
         return -1;
    }
}

Ответы [ 3 ]

3 голосов
/ 24 января 2011

Значение 2, возвращаемое из GetLastError(), указывает ERROR_FILE_NOT_FOUND. Вам нужно передать c:/s2.exe, предполагая, что s2.exe фактически находится на диске c:\.

Обратите внимание, что в документации MSDN для параметра lpApplicationName в CreateProcess() написано:

Строка может указывать полный путь и имя файла модуля для выполнения или частичное имя. В случае частичного имени функция использует текущий диск и текущий каталог для завершения спецификации. Функция не будет использовать путь поиска. Этот параметр должен включать расширение имени файла; расширение по умолчанию не предполагается.


Также обратите внимание, что void main() не является стандартным C ++. Однако int main() является стандартным C ++ и позволяет вам возвращать некоторый код завершения. (Я отредактировал ваш фрагмент кода, чтобы отразить это.)

1 голос
/ 16 июня 2012

Вам нужно L"c:\s2" вместо L"c:/s2".Microsoft предпочитает обратную косую черту в путях.Прямая косая черта допускается в некоторых контекстах, но, как правило, проблематична в коде.

1 голос
/ 24 января 2011

MSDN говорит о lpApplicationName функции CreateProcess:

Этот параметр должен включать расширение имени файла;расширение по умолчанию не предполагается.

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