使用Inno Setup卸载我的应用程序时,我提供了一个页面,允许用户选择卸载与该软件相关的一些第三方库。
在卸载我的应用程序之前,我首先为每个选定的应用程序的卸载文件调用Exec(),详见下面的PostgreSQL:
function UninstallPostgres() : Boolean;
var
Value : String;
ResultCode: Integer;
begin
if not IsWin64 or not RegQueryStringValue(HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PostgreSQL 8.4', 'UninstallString', Value) then
RegQueryStringValue(HKLM32, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PostgreSQL 8.4', 'UninstallString', Value);
if (Value <> '') then
Result := Exec(Value, '--mode unattended --unattendedmodeui none', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
一切正常,除了ewWaitUntilTerminated似乎被忽略,程序在PostgreSQL卸载时继续执行。
我猜这是因为为PostgresSQL执行的卸载文件正在终止,但在后台启动了另一个进程以完成卸载。
有没有人遇到过这个问题?如果是这样的话,他们有一个更优雅的解决方案,而不是简单地轮询注册表项以检查PostgreSQL是否确实已被删除,然后再继续执行?