반응형
// 프로그램에서 서브 프로그램을 실행시킨 후 종료시까지 대기한 후, 종료가 되면 실행 procedure Tfrm_UMS.InstallConversion; var StartupInfo : TStartupInfo; ProcessInfo : TProcessInformation; nFlag : Boolean; FileName : String; nCardinal : DWORD; nHandle : HWND; Cnt : Integer; begin VCLUnZip.ClearZip; Cnt := 0; nFlag := False; FileName := ExtractFilePath(Application.ExeName) + 'plugin' + _USE_CONVERSION_FILE_PATH + 'Setup.exe'; try ZeroMemory(@StartupInfo, SizeOf(StartupInfo)); StartupInfo.cb := SizeOf(StartupInfo); FillChar(ProcessInfo, SizeOf(ProcessInfo), 0); with StartupInfo do begin cb := SizeOf(TStartupInfo); // dwFlags := STARTF_USESHOWWINDOW; wShowWindow := SW_HIDE; end; // End of with // 프로그램을 실행한다. nFlag := CreateProcess(nil, PChar(FileName), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo); // WinExecAndWait(FileName, SW_SHOW); if nFlag then begin // WaitForInputIdle(ProcessInfo.hProcess, INFINITE); // ShellExecute(ProcessInfo.hProcess, PChar(FileName), nil, nil, nil, 0); // WinExecAndWait(FileName, SW_SHOW); // 실행된 프로그램이 종료될 때까지 반복한다. while true do begin GetExitCodeProcess(ProcessInfo.hProcess, nCardinal); if nCardinal = STILL_ACTIVE then begin Application.ProcessMessages; // Sleep(1000); Continue; end; // ShowMessage('끝내자'); Break; end; // End of while // WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); end; except end; // if nHandle > 32 then begin // end; if FindConVersionDrive then begin nHandle := FindWindow(nil, 'ODC Desktop Sample'); PostMessage(nHandle, WM_QUIT, 0, 0); MessageDlg('설치가 완료되었습니다.'#13#10'플러그인을 다시 실행하여주세요.', mtInformation, [mbOK], 0); Close; end else begin MessageDlg('설치가 비정상적으로 종료되었습니다.'#13#10'다시 설치하시기 바랍니다.', mtInformation, [mbOK], 0); end; // 설치파일 삭제 try EraseDirectory(ExtractFilePath(Application.ExeName) + 'plugin\FaxConversion'); except end; // Close; end;
반응형
'Programming > Delphi' 카테고리의 다른 글
드라이브 정보 얻기 (0) | 2010.06.30 |
---|---|
Drag Over Event (0) | 2010.06.30 |
지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전) (0) | 2010.06.30 |
[FTP 에러] Invalid PORT Command. (0) | 2010.06.30 |
다른 프로그램의 버튼 클릭하기 (0) | 2010.06.30 |