반응형
// 프로그램에서 서브 프로그램을 실행시킨 후 종료시까지 대기한 후, 종료가 되면 실행
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 |