如何检测用户是否已经安装了软件,如果是这样,如何提供删除旧版本的可能性?
@H_404_7@解决方法
我已经写了一些行来检查.现在是否正确?如果这是正确的,那么如何让用户选择是否要继续安装或卸载旧版本?
@H_502_4@#define UNINSTKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\setupname_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?
@H_502_4@function GetUninstallString: string;
var
sUnInstPath: string;
sUnInstallString: String;
begin
Result := '';
sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{{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,'Software\Microsoft\Windows\CurrentVersion\Uninstall\{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;