Java 如何使用安装程序在简单的.exe文件中安装多个安装?

Java 如何使用安装程序在简单的.exe文件中安装多个安装?,java,mysql,deployment,installation,inno-setup,Java,Mysql,Deployment,Installation,Inno Setup,我正在开发Java富客户端应用程序。使用MySQL服务器,我将其设置为.jar文件。 我希望用户有一个简单的.exe文件,当运行它时,安装JRE和MySQL服务器,然后他将有一个jar文件的快捷方式,只需处理它 我尝试使用的不仅仅是安装程序:inno安装程序、高级安装程序、Excelsior安装程序。。。 但它们都给了我相同的结果:安装产品后,只需将JRE和MySQL服务器的所有.exe文件放在目标文件夹中(即只需解压缩文件而不安装它们) 有人能帮我吗?通过InnoSetup创建安装文件时,您可

我正在开发Java富客户端应用程序。使用MySQL服务器,我将其设置为
.jar
文件。 我希望用户有一个简单的
.exe
文件,当运行它时,安装JRE和MySQL服务器,然后他将有一个jar文件的快捷方式,只需处理它

我尝试使用的不仅仅是安装程序:inno安装程序、高级安装程序、Excelsior安装程序。。。 但它们都给了我相同的结果:安装产品后,只需将JRE和MySQL服务器的所有
.exe
文件放在目标文件夹中(即只需解压缩文件而不安装它们)


有人能帮我吗?

通过InnoSetup创建安装文件时,您可以在InnoSetup脚本文件的
[run]
下运行任意数量的可执行文件(Windows安装程序安装程序都是可执行文件)。但是,您应该使用
检查:
检查每个安装程序是否已安装

<>安装java高级映像(JAI)运行时和Visual C++ 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;
[文件]
来源:“install\README.txt”;DestDir:“{app}”标志:ignoreversion
来源:“install\vcredit_x86.exe”;DestDir:“{app}”标志:ignoreversion recursesubdirs createsubdirs
来源:“install\jai-1_1_3-lib-windows-i586-jre.exe”;DestDir:“{app}”标志:ignoreversion recursesubdirs createsubdirs
[图标]
名称:“{group}\{cm:UninstallProgram,{{MyTitleName}”;文件名:“{uninstallexe}”;注释:“卸载{#MyTitleName}”
[运行]
文件名:“{app}\vcredit_x86.exe”;StatusMsg:{cm:runvcredit2010x86};标志:runhidden shellexec WaitUnterminated;检查:已安装ISNOTvcRedist2010x86
文件名:“{app}\jai-1_1_3-lib-windows-i586-jre.exe”;StatusMsg:{cm:RunJAIByDefault};标志:runhidden shellexec WaitUnterminated;检查:未安装
[守则]
函数未安装:布尔值;
开始
结果:=不存在注册表项(HKLM,'SOFTWARE\SUNW\Java Advanced Imaging');
结束;
函数isNotVCRedist2010x86已安装:布尔值;
变量
已安装:红衣主教;
开始
结果:=regquerywordvalue(HKLM,'SOFTWARE\Microsoft\VisualStudio\10.0\VC\vcredit\x86',
“已安装”、“已安装”和(已安装1);
结束;
注意: 如果
[文件]
中的安装程序位于InnoSetup项目的“安装”文件夹中,则在InnoSetup过程中会对其进行压缩,以生成InnoSetup可执行文件。当您运行创建的安装程序时,它将解压缩您定义的
{app}
文件夹中的安装程序,并将执行
[run]

下定义的任何内容,这是此部署的明显选择

  • 使用
    deployJava.js
    确保用户拥有正确的JRE最低版本来运行应用程序
  • 使用调用调用MySQL安装程序
  • (如有必要)使用存储任何特定于安装的数据(例如,用户选择安装DB的路径)
  • 在启动文件中指定桌面快捷方式和菜单项

  • 请注意,如果您可以在Mac上为MySQL提供安装程序。而且*nix,JWS可以通过操作系统对下载进行分区。

    “我希望用户拥有一个简单的.exe文件”,这对Mac或基于*nix的机器的最终用户没有用处。嗨,安德鲁。。。Java Web开始?:)是的,应用程序有一个GUI,它确实不需要JDK来运行或工作,但我希望它只用于测试something@Andrew汤普森啊,我只是在逗你。不管怎么说,它是“ee”。不是“ee”,但我还有另外两个未注册的帐户名为“eee”。我不知道SO是否能像以前那样合并这三个未注册的帐户。@Andrew Thompson我希望你能在JWS上发布一些东西;)现在停止,因为这就像现在聊天……哈哈,这是我第一次使用inno,所以我对这些东西不太了解,我写了这个[运行]文件名:“{app}\{MyAppExeName}”;描述:“{cm:LaunchProgram,{#StringChange(MyAppName,&“,&&&“}}”;标志:shellexec postinstall skipifsilent文件名:“{app}\JRE_1_5_.exe”;参数:“--install MyApp_JRE_1_5_”文件名:“{app}\JDK_6_WI.exe”;参数:“--install MyApp_JDK_6_WI”这是正确的还是错误的?如果错误,我如何编写它?当您运行InnoSetup编译InnoSetup脚本文件时,它会生成事件。如果有什么问题,我们可以从这个InnoSetup事件traceIs判断是否有另一个安装程序在GUI中工作,而无需编写代码??Excelsior安装程序能完成我想要的工作吗?代码编写只在少数情况下需要,比如在我上面的示例中,某些安装程序无法正确通知用户之前是否安装过(这不是InnoSetup的错误)。我相信所有的安装创建软件都有一些代码来解决这个问题。如果我不想检查之前是否安装过,如何设置多个文件??