2011-01-23 5 views
0

s2.exe이라는 프로세스를 만들려고합니다. 그러나 첫 번째 인수로 전달해야 할 것을 알아내는 데 문제가 있습니다. 나는 프로세스가 위치 할 곳의 이름과 위치를 넣으려고했지만 "CC 2 시작 오류 2"가 발생합니다. 첫 번째 매개 변수에는 정확히 무엇이 있어야합니까? (MSDN에 따라 모듈의 경로이다.)를CreateProcess, 첫 번째 매개 변수 질문

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

GetLastError()2에서 리턴 값은 ERROR_FILE_NOT_FOUND을 나타낸다. 실제로 c:\ 드라이브에 s2.exe이 있다고 가정하고 c:/s2.exe을 전달해야합니다. CreateProcess()에서 lpApplicationName 매개 변수에 대한 MSDN 설명서를 말한다

참고 :

문자열은 전체 경로를 지정하고 실행하는 모듈의 파일 이름을하거나 부분적인 이름을 지정할 수 있습니다. 부분 이름의 경우, 함수는 현재 드라이브와 현재 디렉토리를 사용하여 스펙을 완료합니다. 이 함수는 검색 경로를 사용하지 않습니다. 이 매개 변수에는 파일 이름 확장명이 포함되어야합니다. 기본 확장은 사용되지 않습니다.


또한 void main()은 표준 C++되지 않습니다. 그러나 int main()은 표준 C++이며 일종의 종료 코드를 반환 할 수 있습니다. (나는 그것을 반영하기 위해 코드를 편집.)

1

MSDN이 CreateProcess 함수의 lpApplicationName에 대해 말한다 :

이 매개 변수는 파일 이름 확장명을 포함해야합니다; 기본 확장은 사용되지 않습니다.

1

L"c:/s2" 대신 L"c:\s2"이 필요합니다. Microsoft는 경로에서 백 슬래시를 선호합니다. 슬래시는 일부 상황에서는 허용되지만 일반적으로 코드에는 문제가 있습니다.

관련 문제