他のアプリケーションの起動

WindowsユニットのCreateProcessで行う。同様の機能を持つWinExecは互換性維持のために残されているようなので使用しないほうがいいみたい。

var
App: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
App := 'Config.exe';
FillChar(StartupInfo, SizeOf(TStartUpInfo), 0);
if(CreateProcess(nil, PChar(App), nil, nil, false, NORMAL_PRIORITY_CLASS,
nil, nil, StartupInfo, ProcessInfo)) then
begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end
else
MessageDlg(App + 'が見つかりません', mtError, [mbOk], 0);
end;

ついでにWaitForSingleObjectで起動したプロセスの終了待ち。ここでは待ち時間にINFINITEを指定しているので、起動したプロセスが終了するまで元の方は固まる。

終了したらCloseHandleで閉じ。プロセスのハンドルとメインスレッドのハンドルの両方を閉じる必要有。ハンドルが必要ない場合は、プロセスを作成した直後にCloseHandleでいいみたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です