inno-setup – 如何检测旧的安装并提供删除?
发布时间:2020-12-15 04:22:02 所属栏目:大数据 来源:网络整理
导读:如何检测用户是否已经安装了软件,如果是这样,如何提供删除旧版本的可能性? 我已经写了一些行来检查.现在是否正确?如果这是正确的,那么如何让用户选择是否要继续安装或卸载旧版本? #define UNINSTKEY "SoftwareMicrosoftWindowsCurrentVersionUninstal
如何检测用户是否已经安装了软件,如果是这样,如何提供删除旧版本的可能性?
我已经写了一些行来检查.现在是否正确?如果这是正确的,那么如何让用户选择是否要继续安装或卸载旧版本? #define UNINSTKEY "SoftwareMicrosoftWindowsCurrentVersionUninstallsetupname_is1" var: uninstallPath: string; Function InitializeSetup: Boolean; begin if(RegQueryStringValue(HKLM,'{#UNINSTKEY}','UninstallString',uninstallPath)) and (uninstallPath <> '') and (fileexists(uninstallPath)) then begin Result := (MsgBox(CustomMessage('NotVerifiedVersionFound'),mbConfirmation,MB_YESNO or MB_DEFBUTTON2) = IDYES); end // ... end 解决方法
您可以使用Craig McQueen最初发布的解决方案:
InnoSetup: How to automatically uninstall previous installed version?
function GetUninstallString: string; var sUnInstPath: string; sUnInstallString: String; begin Result := ''; sUnInstPath := ExpandConstant('SoftwareMicrosoftWindowsCurrentVersionUninstall{{A227028A-40D7-4695-8BA9-41DF6A3895C7}_is1'); //Your App GUID/ID sUnInstallString := ''; if not RegQueryStringValue(HKLM,sUnInstPath,sUnInstallString) then RegQueryStringValue(HKCU,sUnInstallString); Result := sUnInstallString; end; function IsUpgrade: Boolean; begin Result := (GetUninstallString() <> ''); end; function InitializeSetup: Boolean; var V: Integer; iResultCode: Integer; sUnInstallString: string; begin Result := True; // in case when no previous version is found if RegValueExists(HKEY_LOCAL_MACHINE,'SoftwareMicrosoftWindowsCurrentVersionUninstall{A227028A-40D7-4695-8BA9-41DF6A3895C7}_is1','UninstallString') then //Your App GUID/ID begin V := MsgBox(ExpandConstant('Hey! An old version of app was detected. Do you want to uninstall it?'),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 Result := False; //when older version present and not uninstalled end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |