NetBeans和Inno安装程序无法生成正确的Native .exe

时间:2017-03-04 00:05:00

标签: java netbeans inno-setup native

我在Netbeans中创建了一个JavaSE应用程序,并使用Inno Setup 5来生成我认为是完整的Windows安装,包括JRE。按照说明,我已检查Native的NetBeans属性框,并在Path中有Inno Setup 5。 EXE生成并安装得很好PROVIDED目标机器已安装Java。如果没有,则没有与.jre和javac.exe没有文件关联,因此.jar文件将无法运行。

2017年3月4日:经过大量的探索和尝试,我现在更全面地了解了NetBeans Native包的真正用途。它创建一个Installer exe,当转移到具有或不具有JRE的目标机器上并在其上执行时,创建实际的myApp.exe并将其放在“开始”菜单上。我的问题一直认为myApp.jar文件中有JRE,所以我只是想双击myApp.jar。如果我使用myApp.exe,它就可以工作。

但是,我现在看到我还有问题。 myApp需要许多支持数据文件并从.ini文件中读取。因此,我将不得不创建一个Inno设置来单独完成这些工作,我的用户必须下载并运行两个安装程序,可以这么说。如果执行NetBeans Native安装程序的人使Inno安装文件可以进行编辑,那就很好了。

2 个答案:

答案 0 :(得分:1)

NetBeans有一个Packaging选项,用于创建“Native”应用程序,即Windows的MyApp.exe文件。这一点的重要性在于您获得了INCLUDES JRE的Windows可执行文件,这意味着最终用户无需在他/她的机器上安装Java或JRE来运行该应用程序。

这听起来很棒,但文档并没有明确说明如何使其工作,至少对我而言。这就是我所学到的。

首先,要使其工作,您必须在开发计算机上安装Inno Setup 5或更高版本。显然,NetBeans创建一个Inno .iss文件并运行它。

为了更好地理解它,我为Inno AnagramGame示例制作了一个NetBeans项目。要启用Native包选项,首先在NetBeans中选择Project,右键单击并选择Properties | Deployment。检查本机包装盒。这会将EXE选项放在NetBeans Packaging菜单上。即,选择项目,右键单击并单击Package As。单击EXE安装程序将启动构建“包”的过程。

构建安装程序需要很长时间,因为它必须累积JRE的所有必要部分并合并到包中。这也使安装人员大了。即使对于最小的Java程序,它也将大约为35 Mb。

在某些应用程序的Native打包之后,例如AnagramGame2,您将在NetBeans项目文件夹中找到以下内容: C:\ Users \ Ed Sowell \ Documents \ NetBeansProjects \ AnagramGame2 \ dist \ anagrams.jar 和 C:\ Users \ Ed Sowell \ Documents \ NetBeansProjects \ AnagramGame2 \ dist \ bundles \ AnagramGame2-1.0.exe

Anagrams.jar是AnagramGame2应用程序的Java归档文件。如果你安装了JAVA,这实际上会通过双击来运行项目。但是,如果将其移动到另一台未安装Java或JRE的计算机,则它将无法执行。原因是jar文件没有包含JRE。我花了很长时间才认识到这一点。

现在,你可能会认为AnagramGame2-1.0.exe是应用程序的Native可执行文件,但是,它不是。它实际上是安装程序,另一件需要我花费很长时间才能识别的东西。

那么,传说中的Windows Native应用程序文件在哪里?答案是它无处可去。为了得到它你必须运行安装程序!在运行它之后,您将在所有地方找到备受欢迎的EXE,C:\ Users \ Ed Sowell \ AppData \ Local \ AnagramGame2:

C:\ Users \ Ed Sowell \ AppData \ Local \ AnagramGame2 \ AnagramGame2.exe

此外,选择适当的选项后,应用程序名称将显示在Windows“开始”菜单和桌面上。

因此,要分发Windows Native应用程序,您必须:

  1. 创建NetBeans项目。
  2. 执行项目的清洁构建
  3. 启用项目的本机打包选项
  4. 将包作为本机安装程序
  5. 分发安装程序,在此示例中为AnagramGame2-1.0.exe
  6. 然后您的用户运行安装程序。然后,他/她从“开始”菜单运行应用程序或双击桌面图标。
  7. 对于正确使用此NetBeans / Inno安装过程,我仍然有很多不明白的地方。有一些小谜团,例如为什么它隐藏了User AppData Local中最终产品的位置。谁会想到看那里?为什么它会调用安装程序AnagramGame2-1.0.exe而不是setupAnagramGame2.exe?但这是我尚未解决的最大问题:如何安装应用程序所需的辅助文件?或者从INI文件中获取所需数据?如果NetBeans进程中构建和使用的.iss可用,则可以对其进行编辑,但到目前为止我还无法找到它。我的猜测是它被删除了。除此之外,我唯一能想到的就是编写另一个 .iss文件来完成这项工作。不幸的是,用户必须下载并运行两个安装程序!

答案 1 :(得分:1)

使用Inno Setup的NetBeans打包机制的问题在于-AFAIK-您无法将自己的.iss文件提供给构建机制。 NetBeans创建自己的安装脚本文件,几乎没有外部影响。

我最大的问题是,该软件包已安装在C:\Users\<user>\AppData\Local中(至少对于Windows是这样)。到底谁会去那里找回申请???不知道他们为什么做出这个决定。

每当您单击NetBeans生成的可执行文件时,您都无法控制位置,快捷方式...。这太糟糕了...

为克服这个问题,我做了以下事情:

  • 允许NetBeans进行工作并创建可执行安装程序
  • 创建安装程序后,运行安装程序,并使其在Windows安装中所有位置中最奇怪的位置安装应用程序
  • 使用原始NetBeans生成的安装可执行文件创建的所有文件和子目录,打开Inno Setup Compiler并创建您的自己的安装脚本。
  • 使用上述方法生成我自己的安装可执行文件
  • 运行自行创建的安装程序:自您自己创建安装可执行文件以来,您现在拥有所需的所有选项(更改安装目录,默认安装目录,默认安装目录名称,是否使用桌面快捷方式,允许所有用户或仅当前用户,...)

我知道这是一种解决方法,并且是一种双向过程,但是那时候我需要它是我能找到的唯一(?)/ best(?)方法。

同时,我找到了另一种方法来在this page上创建安装程序可执行文件,您可以在其中创建自己的.iss文件,因此可以更好地控制即将发生的事情

我还没有尝试过,但是我认为它有很多机会。