Inno Setup:卸载以前安装的版本失败

时间:2019-11-07 06:52:43

标签: inno-setup installshield pascalscript

我试图卸载由InstallShield安装的先前版本。

function GetUninstallString(): String;
var
    sUnInstPath: String;
    sUnInstallString: String;
begin
    sUnInstPath := ExpandConstant('SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{OldAppID}');
    sUnInstallString := '';
    if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString)then 
        RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
    MsgBox(sUnInstallString, mbInformation, MB_OK);
    Result := sUnInstallString;
end;

function UninstallOldVersion(): Integer;
var
    sUnInstallString: String;
    iResultCode: Integer;
begin
//  Returb Values:
//  1 - uninstall string is empty
//  2 - error executing the UnInstallString
//  3 - successfully executed the UnInstalString    

    //default return value
    Result := 0;

    //get the uninstall string of the old app
    sUnInstallString := GetUninstallString();                     
    if sUnInstallString <> '' then begin
        sUnInstallString:= RemoveQuotes(sUnInstallString);

        if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES', '', SW_HIDE, ewWaitUntilTerminated, iResultCode) then begin
            Result := 3
            MsgBox('3', mbInformation, MB_OK);
        end
        else begin
            Result := 2
            MsgBox('2', mbInformation, MB_OK);
        end;
    end else begin
        Result := 1 
        MsgBox('1', mbInformation, MB_OK);
        end;
end;

UninstallOldVersion()的结果为“ 3”,但旧版本实际上并未卸载。

GetUninstallString()的结果:

"C:\Program Files (x86)\InstallShield Installation Information\{OldAppID}\setup.exe" -runfromtemp -l0x0409  -removeonly

0 个答案:

没有答案