2013-07-22 3 views
1

hev CreatProcess 함수의 문제가 C++의 windows.h 헤더에 추가되었습니다. 나는 cmd 명령을 포함하는 TCHAR 변수를 전달하려고 할 때마다 오류를 반환합니다. 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

명령 셸 cmd.exe으로 구현 된 명령을 실행하려면 실제로 cmd.exe를 실행해야합니다. CreateProcess은 자동으로 그렇게하지 않습니다.

cmd.exe /c <your command here> 형태의 명령 줄을 작성하십시오. /c은 "하나의 명령을 실행 한 다음 종료"를 의미합니다.

1

DOS 명령을 실행하려면 전에 cmd 쉘을 실행해야합니다.

CreateProcess은 그렇게하지 않습니다.

/ccmd입니다. 쉘에서 명령을 실행하고 종료 할 수 있습니다. 유형이 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

관련 문제