我有一个奇怪的问题。在我的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;
答案 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文件夹。