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安装脚本示例”,它更进一步,并读取任何以前安装的版本的版本号,并将该版本号与当前安装包的版本号进行比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值