createprocess 예제

응용 프로그램이 환경 블록을 제공하는 경우 시스템 드라이브의 현재 디렉터리 정보가 새 프로세스로 자동으로 전파되지 않습니다. 예를 들어 =C라는 환경 변수가 있는데, 그 값이 드라이브 C의 현재 디렉토리입니다. 응용 프로그램은 현재 디렉터리 정보를 새 프로세스로 수동으로 전달해야 합니다. 이렇게 하려면 응용 프로그램에서 이러한 환경 변수 문자열을 명시적으로 만들고 사전순으로 정렬해야 합니다(시스템에서 정렬된 환경을 사용하기 때문에). 일반적으로 환경 블록 정렬 순서로 인해 환경 블록의 맨 앞에 이동합니다. . 확장 특성을 설정하려면 STARTUPINFOEX 구조를 사용하고 dwCreationFlags 매개 변수에서 EXTENDED_STARTUPINFO_PRESENT를 지정합니다. (코드의 조각은 여기에서 어딘가에 찍은: https://www.mql5.com/en/forum/131239) CreateProcess 함수는 새 프로세스와 해당 기본 스레드를 만듭니다. 새 프로세스는 지정된 실행 파일을 실행합니다. 자세한 내용은 다음 을 확인하시기 바랍니다: http://msdn.microsoft.com/en-us/라이브러리/ms682425 (VS.85).aspx memset (&si,0,sizeof(si)); si.cb= sizeof (si); _tcscpy(cmdline,_T(„MyProgram.exe/param1“)); 직관적이지 않은 첫 번째 매개 변수를 기록합니다. _tcscpy(프로그램 경로,_T(„MyProgram.exe“)); 경우(! CreateProcess(프로그램 경로, cmdline, NULL, NULL, 거짓, 0, NULL, null,si,&pi)) { AfxMessageBox(„프로그램을 실행할 수 없습니다.“)) 종료 코드가 0으로 표시되면 일반적으로 성공을 나타내고 다른 반환 값은 실패를 나타내지만 이는 규칙이 아닙니다.

관심 있는 명령을 테스트하여 사용할 종료 코드를 확인합니다. CREATE_NEW_PROCESS_GROUP을 지정하여 프로세스를 만들면 새 프로세스를 대신하여 SetConsoleCtrlHandler(NULL, TRUE)에 대한 암시적 호출이 이루어집니다. 즉, 새 프로세스에 CTRL+C가 비활성화되어 있습니다. 이렇게 하면 쉘이 CTRL+C 를 스스로 처리하고 해당 신호를 하위 프로세스에 선택적으로 전달할 수 있습니다. CTRL+BREAK는 비활성화되지 않으며 프로세스/프로세스 그룹을 중단하는 데 사용할 수 있습니다. 오류 코드 =2로 반환되는데, 이는 „시스템이 지정된 파일을 찾을 수 없습니다.“, 응용 프로그램 이름 또는 명령 줄로 전달할 내용에 관계없이 이 문서는 관련 소스 코드 및 파일과 함께 코드 프로젝트 오픈 라이센스(CPOL)에 따라 사용이 허가됩니다. 일괄 처리 파일을 실행하려면 명령 인터프리터를 시작해야 합니다. lpApplicationName을 cmd.exe로 설정하고 lpCommandLine을 다음 인수로 설정합니다: /c와 일괄 처리 파일의 이름. CreateProcess 함수는 만드는 프로세스와 독립적으로 실행되는 새 프로세스를 만듭니다. 그러나 단순화를 위해 관계를 부모-자식 관계라고 합니다. 함수가 실패하면 반환 값은 0입니다.

확장 된 오류 정보를 얻으려면 호출 GetLastError STARTUPINFO 또는 STARTUPINFOEX 구조에 대 한 포인터. 새 프로세스 개체에 반환된 핸들을 자식 프로세스에 의해 상속할 수 있는지 여부를 결정하는 SECURITY_ATTRIBUTES 구조에 대한 포인터입니다. lpProcessAttributes가 NULL이면 핸들을 상속할 수 없습니다. 드라이브 X에 대한 현재 디렉터리 정보를 가져오는 한 가지 방법은 GetFullPathName(„X:“, …)을 호출하는 것입니다.

Die Kommentarfunktion ist geschlossen.