0

この投稿で参照されているコードを使用して既存のバージョンを確認し、新しいバージョンをインストールする前にアンインストールを呼び出すようにインストーラーをセットアップしました。よく働く。私の問題は、アンインストール/インストール手順の後、新しいバージョンのアンインストール(unins000.exe)が作成されないことです(または、IDKが削除された可能性があります)。これにより、後で新しいバージョンが適切にアンインストールされなくなります。既存のバージョンがない場合、アンインストーラーは常に作成されます。私は何が間違っているのですか?

4

1 に答える 1

1

もともとここに投稿されたCraigMcQueenのソリューションを使用できます:InnoSetup:以前にインストールされたバージョンを自動的にアンインストールする方法は?

function GetUninstallString(): String;
var
    sUnInstPath: String;
    sUnInstallString: String;
    begin
        sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{{A227028A-40D7-4695-8BA9-41DF6A3895C7}_is1'); //Your App GUID/ID
        sUnInstallString := '';
            if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
                RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
                Result := sUnInstallString;
    end;

function IsUpgrade(): Boolean;
    begin
        Result := (GetUninstallString() <> '');
    end;

function InitializeSetup: Boolean;
var
    V: Integer;
    iResultCode: Integer;
    sUnInstallString: String;
    begin
        if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\{A227028A-40D7-4695-8BA9-41DF6A3895C7}_is1', 'UninstallString') then begin
//Your App GUID/ID
            V := MsgBox(ExpandConstant('{cm:YesNoUninstall}'), mbInformation, MB_YESNO); //Custom Message if App installed
            if V = IDYES then begin
                sUnInstallString := GetUninstallString();
                sUnInstallString :=  RemoveQuotes(sUnInstallString); 
                Exec(ExpandConstant(sUnInstallString), '', '', SW_SHOW, ewWaitUntilTerminated, iResultCode);
                Result := True; //if you want to proceed after uninstall
                //Exit; //if you want to quit after uninstall
            end
            else begin
                Result := False; //when older version present and not uninstalled
            end;
        end
        else begin
            Result := True; //when no previous version found   
        end;
    end;
于 2012-07-17T13:18:28.203 に答える