INNO Setup:如何基于应用程序的不同版本实现文件更新

3

我有一个用Delphi编写的应用程序,其中包含若干个版本的二进制文件和数据库(MDB)目录数据。

在产品生命周期中,修复/增强功能可能存在于数据库文件或某些二进制文件中。

版本信息保存在注册表中。

当新补丁可用时,用户可能拥有不同版本的程序。

现在用户拥有不同版本,如何在Inno Setup中实现以下场景:

  1. 如果用户拥有版本A,则阻止安装。
  2. 如果用户拥有版本B,则将db及file1、file2、file3复制过去。
  3. 如果用户拥有版本C,则只更新file1。

在Inno Setup中正确地实现这一点的方法是什么?

3个回答

2
默认情况下,Inno会查看文件版本信息。因此,如果您的补丁只需要在补丁中的版本更新时更新文件,则无需进行任何操作;Inno已经按照这种方式运行。
另一方面,如果您的补丁需要用相同版本替换文件(或文件中没有版本信息),请使用标志。这会导致Inno比较文件内容,并在不同时替换它。有关此标志的更多信息,请参见Files的帮助文档。

2
我不确定这是否是正确的方法,但您可以使用[code]部分和BeforeInstall Flags进行如下操作。
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')
Source: "MYFILE.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')
Source: "MYDB.MDB"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')

[Code]

function MyBeforeInstall(InstallPath): Boolean;
begin
  Result:= FALSE;
    //Check if this file is ok to install
    MsgBox(CurrentFileName , mbInformation, MB_OK);
end;

然后使用CurrentFileName确定文件是否可以安装,我不确定如果结果为false,它是否会退出安装程序或跳过单个文件。

您还可以使用[Types] / [Components]部分确定将安装哪些文件,但我不知道是否有自动选择的方法。


0

您可以创建用于检查版本的函数。

有关更多详细信息,请参见此网站 (http://agiletracksoftware.com/blog.html?id=4)

[Code]
; Each data file contains a single value and can be loaded after extracted.
; The filename and DestDir from the [Files] section must match the names
; and locations used here
function GetAppMajorVersion(param: String): String;
     var
          AppVersion: String;
     begin
          ExtractTemporaryFile('major.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\major.dat'), AppVersion);
          Result := AppVersion;
     end;

function GetAppMinorVersion(param: String): String;
     var
          AppMinorVersion: String;
     begin
          ExtractTemporaryFile('minor.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\minor.dat'), AppMinorVersion);
          Result := AppMinorVersion;
     end;

function GetAppCurrentVersion(param: String): String;
     var
          BuildVersion: String;
     begin
          ExtractTemporaryFile('build.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\build.dat'), BuildVersion);
          Result := BuildVersion;
     end;

来自AgileTrack博客的代码片段: 使用Inno Setup创建版本化安装程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接