我如何檢查psqlodbc已完全卸載,這樣我就可以開始unistalling Postgres的
爲我找到了解決辦法 On stackoverflow itself
function TForm1.ExecAndWait(const CommandLine: string) : Boolean;
var
StartupInfo: Windows.TStartupInfo; // start-up info passed to process
ProcessInfo: Windows.TProcessInformation; // info about the process
ProcessExitCode: Windows.DWord; // process's exit code
begin
// Set default error result
Result := False;
// Initialise startup info structure to 0, and record length
FillChar(StartupInfo, SizeOf(StartupInfo), 0);
StartupInfo.cb := SizeOf(StartupInfo);
// Execute application commandline
if Windows.CreateProcess(nil, PChar(CommandLine),
nil, nil, False, 0, nil, nil,
StartupInfo, ProcessInfo) then
begin
try
// Now wait for application to complete
if Windows.WaitForSingleObject(ProcessInfo.hProcess, INFINITE)
= WAIT_OBJECT_0 then
// It's completed - get its exit code
if Windows.GetExitCodeProcess(ProcessInfo.hProcess,
ProcessExitCode) then
// Check exit code is zero => successful completion
if ProcessExitCode = 0 then
Result := True;
finally
// Tidy up
Windows.CloseHandle(ProcessInfo.hProcess);
Windows.CloseHandle(ProcessInfo.hThread);
end;
end;
end;
所以第一步#1 if ExecAndWait('msiexec /x C:\psqlodbc09\psqlodbc.msi') then begin //uninstall postgresNow...!! end;
嘿 Ur的想法是好的, 但問題是註冊表項被刪除在unistall過程中... 但unistaller仍然運行那個時間, 我想要的是,該如何知道如果psqlodbc unistall過程是全面完成...... IM使用此BATC文件反安裝的驅動程序psqlodbc ...... 「MSIEXEC/X C:\ psqlodbc09 \ psqlodbc.msi 」 – PresleyDias
我編輯我的問題,..... 我可以檢查如果'msiexec'進程正在運行或者沒有運行,但是在卸載期間這些'msiexec'中有3個正在運行,但是在卸載之後即使psqlodbc卸載完成,''msiexec'仍然在運行!! .....我也可以檢查'cmd.exe',但我發現在一個例子中'cmd.exe'仍然運行,即使在unistall – PresleyDias
因此你必須計算'msiexec'進程。在我的系統上,ProcessExploer顯示了此進程的完整命令行:'「C:\ WINDOWS \ System32 \ msiexec.exe」/ i「C:\ tmp \ pg \ psqlodbc。msi「'但AFAIK並不容易獲得命令行參數 –