我有一个用Delphi编写的应用程序,它有几个版本,包含带有目录数据的二进制文件和数据库(MDB)。
在产品生命周期中,修复/增强功能在数据库文件或某些二进制文件中。
版本保留在Registry中。
当新补丁可用时,用户可能有不同版本的程序。
现在,用户有不同的版本如何在Inno Setup中实现以下场景:
在Inno设置中实现此功能的正确方法是什么?
答案 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 website (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博客的代码摘录: Using Inno Setup to Create a Versioned Installer