2013-07-22 5 views
1

проблема с hev с функцией CreatProcess, введенная в заголовок windows.h для C++. всякий раз, когда я пытаюсь передать ему переменную TCHAR, содержащую команду cmd, она возвращает ошибку: CreateProcess failed (2). и для этого жду ваших объяснений и решений.почему Команды не выполняются с CreateProcess

рассмотрит код ниже:

#include <windows.h> 
#include <stdio.h> 
#include <tchar.h> 

int _tmain(int argc, TCHAR *argv[]) 
{ 
STARTUPINFO si; 
PROCESS_INFORMATION pi; 

ZeroMemory(&si, sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi, sizeof(pi)); 

if(argc != 2) 
{ 
    printf("Usage: %s [cmdline]\n", argv[0]); 
    return 0; 
} 

// Start the child process. 
if(!CreateProcess(NULL, // No module name (use command line) 
    argv[1],  // Command line 
    NULL,   // Process handle not inheritable 
    NULL,   // Thread handle not inheritable 
    FALSE,   // Set handle inheritance to FALSE 
    0,    // No creation flags 
    NULL,   // Use parent's environment block 
    NULL,   // Use parent's starting directory 
    &si,   // Pointer to STARTUPINFO structure 
    &pi)   // Pointer to PROCESS_INFORMATION structure 
) 
{ 
    printf("CreateProcess failed (%d).\n", GetLastError()); 
    return 0; 
} 

// Wait until child process exits. 
WaitForSingleObject(pi.hProcess, INFINITE); 

// Close process and thread handles. 
CloseHandle(pi.hProcess); 
CloseHandle(pi.hThread); 

}

уведомления: когда я запустить приложение с указанием его пути ..Эты прекрасно работает как => "C: \ code.exe";

+0

В этом случае приложение не работает? Вы говорите, что: code.exe C: \ Code.exe работает? –

+0

, если вы передадите команду DOS в качестве аргумента – afr0ck

ответ

0

Для выполнения команды, выполняемой командной оболочкой aka cmd.exe, необходимо запустить cmd.exe. CreateProcess не делает это автоматически.

Создайте командную строку формы cmd.exe /c <your command here>. /c означает «выполнить одну команду, а затем завершить».

1

Если вы хотите запустить команду DOS, вам необходимо запустить shell cmd раньше.

CreateProcess не делает этого для вас.

Опция /c of cmd позволяет запускать команду в оболочке и завершаться. Вам просто нужно создать командную строку типа cmd /c <your command here>.

Я скомпилировал ваш код на VS2012, и я пробовал: test.exe "cmd /c dir" и он работает как шарм.

Из документации Microsoft:

Чтобы запустить пакетный файл (или команду пакетной), необходимо запустить командный интерпретатор; установите lpApplicationName в cmd.exe и установите lpCommandLine в следующие аргументы:/c плюс имя командного файла.

Источник: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx

Смежные вопросы