Inno Setup:安装后如何安装文件?

时间:2014-01-19 19:18:49

标签: java inno-setup

我有一个奇怪的问题。在我的Inno安装脚本中,我必须检查JRE。如果未安装最小JRE,则会触发捆绑JRE的安装程序。在我的程序文件安装在目的地之后进行此检查。

但我有3个文件,我必须将它们放在JRE文件夹中。所以发生的事情是,在安装捆绑的JRE之后,只有1个文件被“神奇地”删除。

我的意思是:

win32com.dll          -> {pf}/Java/jre7/bin
comm.jar              -> {pf}/Java/jre7/lib/ext
javax.comm.properties -> {pf}/Java/jre7/lib

安装JRE之后,win32com.dll和comm.jar就在那里,但 javax.comm.properties 没有。

为了防止这种情况,我想在安装JRE之后安装该文件。有可能吗?还是其他任何建议?

相关部分我的剧本:

[Run]  
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\jre-7u45-windows-i586.exe"; WorkingDir: {app}; StatusMsg: Checking Java Runtime Environment... Please Wait...;Check:JREVerifyInstall

[Code]
#define MinJRE "1.7"

Function JREVerifyInstall:Boolean;
var
  JREVersion: string;
begin
if (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion')) then 
  begin
  Result := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\JavaSoft\Java Runtime Environment', 'CurrentVersion', JREVersion);
  if Result then
      Result := CompareStr(JREVersion, '{#MinJRE}') <> 0; 
  end
else
  Result := true;

end;

1 个答案:

答案 0 :(得分:3)

[Files]部分为您提供“dontcopy”标志,这意味着您可以打包文件,但可以随时从[代码]部分复制它们(或运行它们或其他任何内容)。像这样:

[Files]
Source: "a.txt"; Flags: dontcopy

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then begin
      //This will actually extract your file to setup's temporary directory. 
      //If you don't do this, the file is skipped
      //The temporary directory is deleted after setup ends.
      ExtractTemporaryFile('a.txt');

      FileCopy(ExpandConstant('{tmp}\a.txt'), 'c:\temp\a.txt', False);
    end;
end;

使用“PostInstall”阶段提取文件并将其复制到JRE文件夹。