일단 코드를.....
bool __fastcall TForm1::WaitCommand(AnsiString Command){
STARTUPINFO sInfo;
memset(&sInfo, 0, sizeof(STARTUPINFO));
sInfo.cb = sizeof(sInfo);
sInfo.wShowWindow = SW_HIDE;
SECURITY_ATTRIBUTES sAttr;
sAttr.nLength = sizeof(sAttr);
sAttr.lpSecurityDescriptor = NULL;
sAttr.bInheritHandle = TRUE;
PROCESS_INFORMATION pInfo;
if(CreateProcess(NULL, Command.c_str(), &sAttr, &sAttr, TRUE,0, NULL, NULL ,
&sInfo, &pInfo) != TRUE)return false;
DWORD result;
do{
Application->ProcessMessages();
result = WaitForSingleObject(pInfo.hProcess, 5);
}while(result == WAIT_TIMEOUT);
if (result == WAIT_FAILED)return false;
CloseHandle(pInfo.hProcess);
return true;
}
void __fastcall TForm1::Button1Click(TObject *Sender){
WaitCommand("notepad.exe");
ShowMessage("실행끝");
}
소스를 간단하게 설명하면 Button1 을 눌르면 노트패드를 실행 하고
기다리다가 종료 되면 "실행끝" 이라구 출력 합니다.
그런데 제 프로그램을 a.exe 라구 치구요, 노트 패트를 b.exe 이라구 치고
a.exe 에서 b.exe 실행한 상태에서 a.exe 작업관리자에서 강제 종료 시켜 버리면
b.exe 도 같이 종료 되게 하고 싶은데요
정상적인 종료라면 OnClose 같은 이벤트를 써서 TerminateProcess 로 종료시켜 버리면되지만
작업관리자로 강제로 종료 시켜 버리면 아무 이벤트도 오지 않습니다.
a.exe 를 작업관리자에서 강제 종료 되면 b.exe 도 같이 종료 되게 하고 싶은데
방법이 없을까요?
|