|
다음처럼 이렇게 만들어봤습니다.
main() // ========> testa.exe
{
WinExec("testb.exe",1);
ShowMessage("testb.exe를 성공적으로실행하고 리턴되었습니다..");
exit(1);
}
main() //========> testb.exe
HWND hwnd = FindWindowEx(NULL, NULL, NULL, "testa");
if(hwnd) ShowMessage("핸들있음!"); else ShowMessage("핸들없음 NULL !");
CloseHandle(hwnd);
if(FileExists("testa.exe")) DeleteFile("testa.exe");
exit(1);
}
이렇게하니깐 testb.exe를 콜한 testa.exe파일도 지워집니다.
근데, 웃기는건 testb.exe에서 넣어두었던 test용 코드.. 즉,
if(hwnd) ShowMessage("핸들있음!"); else ShowMessage("핸들없음 NULL !");
입니다.
이게 들어있을경우 testa.exe가 삭제되고,
이걸 빼버리면, testa.exe가 제데로 삭제가 안된다는겁니다.
이건 아무런 영향도없는건디 말입니다. 되는이유는뭐고 또 안되는 이유..
그 이유를 아직모르겄는데,,,, 혹시, 이 현상을 설명해주실분 계신가요 ?
이방법말고,, 혹시 또다른 방법을 알고계시면 조언이나 힌트라도주시면 고맙겠습니다.
-- 돌파리 올림 --
이정미 님이 쓰신 글 :
: a.exe 에서 b.exe 를 구동시키고, b.exe 가 구동될때
:
: b.exe 에서 a.exe 를 종료시키시면 될것 같은데여....
:
: 간단한거니까 한번 해보보시구 잘되는가 알려주세여....
:
: //--->
: HWND hwnd = FindWindowEx(NULL, NULL, NULL, "a");
:
: if(hwnd)
: {
: PostMessage(hwnd, WM_QUIT, 0, 0);
: }
:
: //--->
: DeleteFile("a.exe");
:
: //--->
:
: 백상열 님이 쓰신 글 :
: : 답변 감사드립니다..
: :
: : 저두 그렇게하면 되는줄 알았는데, 안되더라구요,
: : 논리적으로 가만히 생각해봐도... 그건 a.exe프로그램이 b.exe를 일단 Call하면
: : 하위process(b.exe)가 실행되는거고요,
: : a.exe엔 비록 뭐 exit(1);이나 뭔가가 있더라도, 어쨌거나 하위프로세서b.exe가 실행을
: : 끝내기전에는 종료되지않고 그게 끝나기를기다려 리턴값을 받아처리하게되지요,
: :
: : 그러므로 b.exe에 Delete커멘드가 있더라도 실행중인 프로그램a.exe는
: : 에러(즉, a.exe파일이 안지워짐)가 날거같더군요.,.
: :
: : 그래서 생각해보니 이건 프로세서실행또는 프로세스종료 차원에서 접금을 해야될거같습니다.
: : 아직 연구중이라, 뭐 꼭 짚히는곳은 없지만,
: : 예전에나온 볼랜드 Turbo-C 시리즈를 볼떄 그런 프로세서에관한건 언듯한번 본거같습니다
: : SpawnX()라든가, 아니면 Spawnl()이라든가, execX()라든가 뭐라든가..
: : 아무튼 저두 연습중이니깐 곧 알수있겠지요.. 열심히 찾아보고 test중입니다.
: :
: : 혹시 이부분에 아시는분있으면 답장 부탁합니다. 그럼..
: :
: :
: : 최준호.스페로 님이 쓰신 글 :
: : : 백상열 님이 쓰신 글 :
: : : : 다소 어려운 문제가있습니다.
: : : :
: : : : 실행하던 A프로그램(컨트롤)을 죽이고, 아주 그프로그램(a.exe)파일을
: : : : 삭제하는 프로그램(b.exe)를 실행하도록 하려는겁니다.
: : : :
: : : : a.exe 내부에서 b.exe를 실행하고 자신(a.exe)은 실행을 중단해야할 뿐만아니라
: : : : b.exe에서는 a.exe프로그램(파일)을 삭제해야하는데, 어떻게하면 가능한지요?
: : : :
: : : : 도사님의 답변을 구합니다. 그럼..
: : :
: : : 안녕하세요 스페로 입니다.
: : :
: : : 제 생각입니다. 실제로 구현 해보지는 않았습니다.
: : :
: : : 먼저 A프로그램에서 B프로그램을 실행시키는 코드로 B를 실행 합니다.
: : :
: : : WinExec("B.EXE",1);
: : :
: : : 물론 위함수를 호출할때는 정확한 경로를 정해주어야 하구요
: : :
: : : 그다음 A프로그램에서
: : :
: : : exit() 함수로 올바르게 종료 합니다.
: : :
: : : B프로그램은 이미 수행되었겟지요
: : :
: : : B프로그램은 시작시 바로 A프로그램을 제거 하게 합니다.
: : :
: : : DeleteFile("A.EXE");
: : :
: : : 설마 A프로그램이 아직도 종료 되지 않았을까요? A프로그램은 B를 호출하자마자 끝났을겁니다.
: : :
: : : 그럼 문제가 없겠지요.
: : :
: : : 이런식으로 하면 해결되지 않을까요?
: : :
: : : ^^그럼
|