我正在开发Java富客户端应用程序。在MySQL服务器上,我把它变成了.jar
文件。
我希望用户有一个简单的.exe
文件,在运行它时,安装JRE和MySQL服务器,然后他将有一个jar文件的快捷方式,并简单地处理它。
我尝试使用的不仅仅是安装程序:inno安装程序、advanced安装程序、Excelsior安装程序。。。
但它们都给了我相同的结果:安装产品后,只需将JRE和MySQL服务器的所有.exe
文件放在目标文件夹中(即,只需解压缩文件而不安装它们)。
有人能帮我吗?
最佳答案
通过InnoSetup创建安装文件时,可以在InnoSetup脚本文件的[Run]
下运行任意多个可执行文件(Windows安装程序是可执行的)。但是,您应该使用Check:
检查每个安装程序是否已安装。
在目标系统上安装Java高级映像(JAI)运行时和VisualC++ 2010可重新分配包(X86)注册表检查:
[Files]
Source: "install\README.txt"; DestDir: "{app}" Flags: ignoreversion
Source: "install\vcredist_x86.exe"; DestDir: "{app}" Flags: ignoreversion recursesubdirs createsubdirs
Source: "install\jai-1_1_3-lib-windows-i586-jre.exe"; DestDir: "{app}" Flags: ignoreversion recursesubdirs createsubdirs
[Icons]
Name: "{group}\{cm:UninstallProgram, {#MyTitleName}}"; Filename: "{uninstallexe}"; Comment: "Uninstalls {#MyTitleName}"
[Run]
Filename: "{app}\vcredist_x86.exe"; StatusMsg: {cm:RunVCRedist2010x86}; Flags: runhidden shellexec waituntilterminated; Check: IsNotVCRedist2010x86Installed
Filename: "{app}\jai-1_1_3-lib-windows-i586-jre.exe"; StatusMsg: {cm:RunJAIByDefault}; Flags: runhidden shellexec waituntilterminated; Check: IsNotJAIInstalled
[Code]
function IsNotJAIInstalled: Boolean;
begin
Result := not RegKeyExists(HKLM, 'SOFTWARE\SUNW\Java Advanced Imaging');
end;
function IsNotVCRedist2010x86Installed: Boolean;
var
Installed: Cardinal;
begin
Result := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86',
'Installed', Installed) and (Installed <> 1);
end;
注:
如果
[Files]
中的安装程序位于InnoSetup项目的“install”文件夹中,则在InnoSetup过程中压缩它们以生成InnoSetup安装程序可执行文件。运行创建的安装程序时,它将解压缩已定义{app}
文件夹中的安装程序,并执行[Run]
下定义的任何操作