2011-10-26 1 views
0

C++ (VC++ 콘솔 응용 프로그램)에서 작동하도록 다음 코드를 가져 오는 데 문제가 있습니다. 단순히 프로세스를 생성하지는 않지만 오류 텍스트를 인쇄합니다.CreateProcess가 작동하지 않습니다.

static void main(){ 
    char *hotkeyexe = "cmd"; 
    PROCESS_INFORMATION pi; 
    STARTUPINFO si; 

    if(!CreateProcess(hotkeyexe, "", 0, 0, 0, 0, 0, 0, &si, &pi)) 
     printf("error"); 
     scanf("%d"); 
    } 
} 
+3

'int main'이 아니라'static void main'입니다. –

답변

3

STARTUPINFO를 제로화해야합니다.

ZeroMemory(&si, sizeof(si)); 
+0

그걸 시도했지만, 여전히 동일합니다. 프로세스가 없습니다. 단지 오류가 있습니다. –

+0

알아 냈습니다. 나는 왜 처음 2 매개 변수를 역으로해야만했는지 (이유는 모르겠다), 지금은 작동한다. 감사. 당신의 제안이 없어도 프로그램이 제대로 작동하지 않았기 때문에 당신의 대답을 올바른 것으로 표시 할 것입니다. –

+0

모든 경고가 표시되면 컴파일하십시오. "의심스러운 포인터 변환"은 일반적으로 죽은 공짜입니다. – Joshua

1

은 내가 MSDN에서 인용 :

기능은 검색 경로를 사용하지 않습니다. 이 매개 변수에는 파일 이름 확장명이 포함되어야합니다. 기본 확장은 사용되지 않습니다.

그래서 cmd를 사용할 수 없습니다. 작동한다면 작업 디렉토리에 따라 다릅니다. 전체 경로를 사용하면 작동합니다. 예 : 내 컴퓨터에서 작동하는 예입니다.

char *hotkeyexe = "c:\\Windows\\notepad.exe"; 
PROCESS_INFORMATION pi; 
STARTUPINFO si; 
ZeroMemory(&si, sizeof(si)); 

if(!CreateProcess(hotkeyexe, "", 0, 0, 0, 0, 0, 0, &si, &pi)) 
    printf("error"); 
scanf("%d");