CreateProcess 기능의 문제!
-
19-09-2019 - |
문제
기본 응용 프로그램이 있습니다. 기본 응용 프로그램에서 다른 모듈 (제 3 자)에 전화하여 메인 애플리케이션에서 작은 작업을 수행 할 예정입니다. 해당 모듈을 호출 할 때 특정 시간 동안 프로세스는 5 초라고합니다. 일부 정보가 포함 된 Commmand 창의 프로세스를 보여줍니다. 내 메인 응용 프로그램은 호출 모듈이 프로세스를 완료 할 때까지 기다립니다. CreateProcess이지만 작동하지 않는 것 같습니다 ...
예를 들면 : 내 주요 응용 프로그램은 부모 프로세스이고 호출 된 응용 프로그램은 자식 프로세스입니다. 부모 프로세스는 아동 프로세스와 무관해야합니다. 아래의 예를 확인하십시오.
int main()
{
execl("c:\\users\\rakesh\\Desktop\\calledapplication.exe","c:\\users\\rakesh\\Desktop \\calledapplication.exe",0);
}
code in calledapplication
int main
{
printf("Rakesh");
}
이제 첫 번째 프로그램을 실행하면 위의 내용을 고려하십시오 ... 출력은 동일한 명령 창에 나타납니다 (그렇지 않아야합니다). 기본 응용 프로그램이 프로세스를 생성하기를 원하지만 아동 프로세스의 영향을받지 않아야합니다.
해결책
통과하다 CREATE_NO_WINDOW
에서 dwCreationFlags
매개 변수 CreateProcess
.
다른 팁
당신은 "명령 창"에 대해 이야기 했으므로 아이가 콘솔 응용 프로그램이라고 가정합니다. 이 경우 별도의 코놀로에서 프로세스를 생성하고 선택적으로 새 콘솔을 아이콘하거나 숨겨 지도록 강제 할 수 있습니다. 다음 코드는 배치 파일 (mytest.bat)을 해석하는 하위 프로세스를 시작합니다. 도움이되기를 바랍니다. 문안 인사.
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL rv = FALSE;
WCHAR cmdline[] = TEXT("cmd.exe /c mytest.bat");
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
// Add this if you want to hide or minimize the console
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE; //or SW_MINIMIZE
///////////////////////////////////////////////////////
memset(&pi,0,sizeof(pi));
rv = CreateProcess(NULL, cmdline, NULL, NULL,
FALSE, CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi);
if (rv) {
WaitForSingleObject(pi.hProcess, INFINITE);
printf("Done! :)\n");
}
else {
printf("Failed :(\n");
}
return rv ? 0 : 1;
}
아동 프로세스의 출력이 별도의 창에 나타나기를 원하는 것처럼 들립니다. 그렇다면 전화하고 싶습니다 CreateProcess
그리고 그것을 전달합니다 CREATE_NEW_CONSOLE
사용하기보다는 깃발 exec*
.