inno setup 卸载注册表_Inno Setup:如何自动卸载以前安装的版本?

我使用了以下内容。我不确定这是最简单的方法,但它有效。

这种用途{#emit SetupSetting("AppId")}依赖于Inno Setup Preprocessor。如果您不使用它,请直接剪切并粘贴您的App ID。

[Code]

/

function GetUninstallString(): String;

var

sUnInstPath: String;

sUnInstallString: String;

begin

sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');

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 UnInstallOldVersion(): Integer;

var

sUnInstallString: String;

iResultCode: Integer;

begin

// Return Values:

// 1 - uninstall string is empty

// 2 - error executing the UnInstallString

// 3 - successfully executed the UnInstallString

// 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

Result := 3

else

Result := 2;

end else

Result := 1;

end;

/

procedure CurStepChanged(CurStep: TSetupStep);

begin

if (CurStep=ssInstall) then

begin

if (IsUpgrade()) then

begin

UnInstallOldVersion();

end;

end;

end;

备择方案

另请参阅此博客文章“版本比较的Inno安装脚本示例”,它更进一步,并读取任何以前安装的版本的版本号,并将该版本号与当前安装包的版本号进行比较。


版权声明:本文为weixin_31157123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。