Inno Setup卸载可选包

时间:2016-05-11 11:18:30

标签: inno-setup

使用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是否确实已被删除,然后再继续执行?

0 个答案:

没有答案