INNO设置:如何根据应用程序的不同版本实现文件更新

时间:2009-01-15 16:57:16

标签: delphi installer inno-setup

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

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

版本保留在Registry中。

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

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

  1. 如果用户有版本A阻止安装。
  2. 如果用户有版本B copy db over和file1,file2,file3。
  3. 如果用户拥有版本C,则只需更新file1。
  4. 在Inno设置中实现此功能的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

我不确定这是否是正确的方法,但您可以使用[code]部分和BeforeInstall标志

喜欢这样

[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它是否会退出安装程序,或者跳过单个文件。

您还可以使用[类型] / [组件]部分来确定要安装的文件,但我不知道是否有办法自动选择该文件。

答案 1 :(得分:2)

Inno默认会查看文件版本信息。因此,如果您的补丁只需要在补丁中的版本较新时只更新文件,则不执行任何操作; Inno已经表现得那样了。

另一方面,如果您的补丁需要替换具有相同版本的文件(或文件中没有版本信息),请使用 replacecesameversion 标志。这会导致Inno比较文件的内容,如果不同则替换它。有关此标志的更多信息,请参阅文件帮助。

答案 2 :(得分:0)

您可以创建检查版本的功能。

有关详细信息,请参阅this websitehttp://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博客的代码摘录: Using Inno Setup to Create a Versioned Installer