2 augusti, 2019 Inopto_AB

mfc createprocess 예제

응용 프로그램이 환경 블록을 제공하는 경우 시스템 드라이브의 현재 디렉터리 정보가 새 프로세스로 자동으로 전파되지 않습니다. 예를 들어 =C라는 환경 변수가 있는데, 그 값이 드라이브 C의 현재 디렉토리입니다. 응용 프로그램은 현재 디렉터리 정보를 새 프로세스로 수동으로 전달해야 합니다. 이렇게 하려면 응용 프로그램에서 이러한 환경 변수 문자열을 명시적으로 만들고 사전순으로 정렬해야 합니다(시스템에서 정렬된 환경을 사용하기 때문에). 일반적으로 환경 블록 정렬 순서로 인해 환경 블록의 맨 앞에 이동합니다. lpApplicationName 매개 변수는 NULL일 수 있습니다. 이 경우 모듈 이름은 lpCommandLine 문자열의 첫 번째 공백 구분 토큰이어야 합니다. 공백이 포함된 긴 파일 이름을 사용하는 경우 인용된 문자열을 사용하여 파일 이름이 끝나고 인수가 시작되는 위치를 나타내고 그렇지 않으면 파일 이름이 모호합니다. 예를 들어 문자열 ”c:program 파일sub dirprogram 이름”을 생각해 보십시오. 이 문자열은 여러 가지 방법으로 해석될 수 있습니다.

시스템은 다음 순서로 가능성을 시도합니다: 호출 스레드는 WaitForInputIdle 함수를 사용하여 새 프로세스가 초기화를 완료하고 입력 보류 중이 없는 사용자 입력을 기다리는 때까지 기다릴 수 있습니다. CreateProcess는 새 프로세스가 초기화를 완료할 때까지 기다리지 않고 반환되므로 부모 프로세스와 자식 프로세스 간의 동기화에 유용할 수 있습니다. 예를 들어 만들기 프로세스는 새 프로세스와 연결된 창을 찾기 전에 WaitForInputIdle을 사용합니다. 지정된 모듈은 Win32 기반 응용 프로그램일 수 있습니다. 로컬 컴퓨터에서 적절한 하위 시스템을 사용할 수 있는 경우 다른 유형의 모듈(예: MS-DOS 또는 OS/2)일 수 있습니다. CreateProcess 함수는 새 프로그램을 실행하는 데 사용됩니다. WinExec 및 LoadModule 함수는 여전히 사용할 수 있지만 CreateProcess에 대한 호출로 구현됩니다. Windows NT: 구조의 lpSecurity설명자 멤버는 새 프로세스에 대한 보안 설명자입니다. lpProcessAttributes가 NULL이면 프로세스에 기본 보안 설명자가 가져옵니다. 함수가 성공하면 반환 값은 0이 아닙니다.

lpApplicationName 및 lpCommandLine이 NULL이 아닌 경우 *lpApplicationName은 실행할 모듈을 지정하고 *lpCommandLine은 명령줄을 지정합니다. 새 프로세스는 GetCommandLine을 사용하여 전체 명령줄을 검색할 수 있습니다. C 런타임 프로세스는 argc 및 argv 인수를 사용할 수 있습니다. c:program.exe 파일서브 디르프로그램 이름 c:프로그램 파일c dirprogram.exe 이름 c:프로그램 파일sub dirprogram name.exe 동등한 기호는 구분 기호로 사용되기 때문에, 그것은 분리자로 사용되어서는 안됩니다 환경 변수를 참조하십시오. . lpApplicationName 또는 lpCommandLine 문자열에서 응용 프로그램 이름을 지정할 때 응용 프로그램 이름에 파일 이름 확장자가 포함 되는지 여부는 중요 하지 않습니다., 한 가지 예외: MS-DOS 기반 또는 Windows 기반 응용 프로그램 파일 이름 확장명 .COM에는 .COM 확장이 포함되어야 합니다. 응용 프로그램이 이 매개 변수에 대해 NULL을 전달하는 대신 환경 블록을 제공하는 경우 시스템 드라이브의 현재 디렉터리 정보가 새 프로세스에 자동으로 전파되지 않습니다. 이 상황에 대한 설명과 이를 처리하는 방법에 대한 자세한 내용은 다음 비고 섹션을 참조하십시오.

Kontakta oss!