我正在开发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]下定义的任何操作

10-07 19:09
查看更多