如果你想對用戶有一些反饋,你可以嘗試類似的東西。 首先,您的更新應該與您的主應用程序具有相同的AppId
名稱。 然後您可以設置一些檢查,即顯示消息以通知用戶有關狀態。
#define MyAppVersion "1.2.2.7570"
#define MyAppName "MyApp Update"
[Setup]
AppId=MyApp
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1,InstallLocation}
DisableDirPage=True
[CustomMessages]
MyAppOld=The Setup detected application version
MyAppRequired=The installation of {#MyAppName} requires MyApp to be installed.%nInstall MyApp before installing this update.%n%n
MyAppTerminated=The setup of update will be terminated.
[Code]
var
InstallLocation: String;
function GetInstallString(): String;
var
InstPath: String;
InstallString: String;
begin
InstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1');
InstallString := '';
if not RegQueryStringValue(HKLM, InstPath, 'InstallLocation', InstallString) then
RegQueryStringValue(HKCU, InstPath, 'InstallLocation', InstallString);
Result := InstallString;
InstallLocation := InstallString;
end;
function InitializeSetup: Boolean;
var
V: Integer;
sUnInstallString: String;
Version: String;
begin
if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1', 'UninstallString') then begin
RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1', 'DisplayVersion', Version);
if Version =< ExpandConstant('{#MyAppVersion}') then begin
Result := True;
GetInstallString();
end
else begin
MsgBox(ExpandConstant('{cm:MyAppOld}'+Version+'.'+#13#10#13#10+'{cm:MyAppRequired}'+'{cm:MyAppTerminated}'), mbInformation, MB_OK);
Result := False;
end;
end
else begin
MsgBox(ExpandConstant('{cm:MyAppRequired}'+'{cm:MyAppTerminated}'), mbInformation, MB_OK);
Result := False;
end;
end;
其實,如果你使用腳本嚮導來創建自己的腳本,然後應用程序文件的默認是添加'ignoreversion'標誌,在這種情況下,降級實際上將降級的所有文件。爲了確認用戶確實想要這麼做,添加一條警告消息可能是一個好主意,但是否則應該可以正常工作 - 假設您的應用程序本身可以應付降級(例如,數據兼容性問題)。如果沒有,那麼你應該添加一個錯誤,而不是一個警告。 – Miral 2013-03-27 19:51:00
@病毒我沒有注意到。感謝您的高舉。 – Deanna 2013-03-28 09:30:35
用於檢查'InitializeSetup'的示例邏輯將非常棒...我假設已經有一些定義已經出現在inno中... – Assimilater 2017-06-19 19:08:38