我正在使用Inno Setup创建安装程序。当我在已经安装了较新版本(例如1.0.0.3)应用程序的计算机上运行较旧版本(例如1.0.0.2)的安装程序时,我不希望覆盖具有相同名称的文件。
据我所知
- 如果现有文件的版本比要安装的文件新,或者现有文件具有版本信息,但是要安装的文件没有,则不会替换现有文件。
Inno Setup help, Files section
在现有的较新版本上运行较旧版本的安装程序一定不能替换现有文件。
我已经创建了两个安装程序。较旧的版本(1)具有:
AppVersion=1.0.0.2
VersionInfoVersion={#SetupSetting('AppVersion')}
和较新版本(2)具有:
AppVersion=1.0.0.3
VersionInfoVersion={#SetupSetting('AppVersion')}
两个安装程序都有相同的“文件”部分:
[Files]
Source: "D:\installer\test1003\*"; DestDir: "{app}\app"; Flags: recursesubdirs createallsubdirs
但是当我运行(1)具有(2)已安装文件的同名文件时(反之亦然,但据我所知这是合乎逻辑的)
我决定为两个安装程序都创建日志文件,这就是我得到的:
目标文件名:C:\ Program Files \ dir \ app \ tryout.txt
我们的文件时间戳记:2019-01-23 13:02:10.000 目标文件存在。
现有文件的时间戳记:2019-01-23 13:01:50.000
文件的版本:(无)
现有文件的版本:(无)
这些部分除了时间戳相同。
关于如何为已安装文件设置版本的任何想法?
先谢谢了。
我不确定这是否重要,但是我正在使用Unicode版本的Inno Setup。现在它仅支持一个版本,但我想稍后再添加。
答案 0 :(得分:0)
如果要安装某个文件,如果仅安装更新版本的安装程序,则可以使用以下代码:
[Setup]
AppName=My Program
AppVersion=1.5
[Files]
; Overwrite .exe always
Source: "MyProg.exe"; DestDir: "{app}"
; Overwrite .dat file only when installing a newer version
Source: "MyProg.dat"; DestDir: "{app}"; Check: IsInstallingNewerVersion
[Code]
{ Update AppId in the key! }
const
UninstallKey = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1';
DisplayVersionValue = 'DisplayVersion';
var
InstallingNewerVersion: Boolean;
function IsInstallingNewerVersion: Boolean;
begin
Result := InstallingNewerVersion;
end;
function InitializeSetup(): Boolean;
var
PrevVersion, CurVersion: string;
begin
if RegQueryStringValue(HKLM, UninstallKey, DisplayVersionValue, PrevVersion) or
RegQueryStringValue(HKCU, UninstallKey, DisplayVersionValue, PrevVersion) then
begin
Log(Format('Previous version %s', [PrevVersion]));
CurVersion := '{#SetupSetting('AppVersion')}';
Log(Format('Installing version %s', [CurVersion]));
InstallingNewerVersion := (CompareVersion(PrevVersion, CurVersion) < 0);
if InstallingNewerVersion then Log('Installing newer version')
else Log('Not installing newer version')
end;
Result := True;
end;
从Compare version strings in Inno Setup获取CompareVersion
函数。