【问题标题】:Installing Java executables on Windows 10 machines by example通过示例在 Windows 10 机器上安装 Java 可执行文件
【发布时间】:2019-11-14 17:35:58
【问题描述】:

我想一些具有在 Windows 桌面上交付 Java 应用程序经验的 Java 专家将能够胜任这一任务。我一直是 Mac/Linux Java 开发人员,所以这对我来说是未知领域:-/。

我必须编写一个 Java 8 Swing 应用程序并将其安装在 Windows 10(64 位)机器上。我的 gameplan 是将应用程序打包为可执行 JAR 并使用Launch4J wrap 它,使其看起来像原生 Windows EXE(.exe 文件)。然而,它比 发行版要复杂一些:

  • 会有上面提到的JAR/EXE,我们称之为myapp.exe(由myapp.jar构建)
  • 应用程序会将日志输出到(本地?)目录myapp.log
  • 应用程序将在运行时加载配置文件myapp.properties
  • 分发还应包含用户指南MyApp User Guide.html

假设机器上已经安装了 Java 8 JRE/JDK,所以我们不需要担心安装 Java 本身。

安装过程必须简单,包括:

  1. 从机器上完全删除旧版本(以及它的所有其他工件,例如日志文件、配置/属性文件、用户指南等)
  2. 在 Windows 10 默认位置安装新版本,或允许用户指定其他位置

此外,如果可能的话,我希望安装过程包括:

  1. 要求检查最小内存和磁盘空间、操作系统版本信息/兼容性(即确保其已安装在 Windows 10 上等)
  2. 提供易于使用的向导,例如用户可以单击的 MSI
  3. 可选择安装用户桌面的快捷方式

考虑到这一切,我想知道在现代 Windows 10/Java/Launch4J 环境中我有哪些选择。是否有工具可以帮助我快速编写 MSI 脚本,或者我是否必须在 C#/.NET 中编写自己的脚本并将其作为单独的二进制文件/项目?如果 MSI 不是一个选项,有哪些选项可能会击中我上面的所有要点?

我意识到我可以将整个内容作为 ZIP 分发,并且安装过程如下所示:

  1. 将 ZIP 保存到用户计算机上的某个位置,例如桌面
  2. 手动将之前的应用及其工件移至回收站
  3. 解压新的 ZIP

但是,这感觉很笨拙,我正在寻找更专业的东西。这里有什么解决方案吗?

【问题讨论】:

  • 为什么是简历?它的主题不是骗子,是SSCCE,对任何现代 Java/Windows 开发人员来说都是有价值的信息。
  • 我做的多平台工作不多。至少向您发送几个链接:Multi-Platform Installers。还有the major MSI installer tools的列表。
  • 投反对票。 1) 工具推荐是题外话。 2)定义“更专业”是主观的和基于意见的,所以又跑题了。 3)与其他评论一样,可以从搜索引擎中找到大量工具,无论是商业的还是免费的。它们可能是特定于 Java 的,也可能是 Windows 通用的,两者都应该可以工作。
  • 我不认为这是工具推荐,更多的是方法推荐,这是所有软件设计和架构的一个方面。我期待这个特定问题集有已知的解决方案,这将比我上面确定的更加生产化,这就是我所说的“专业”。
  • 请参阅上面提供的链接。坦率地说,Java 部署总是有点混乱。有时会有很多奇怪的解决方案。商业工具 Advanced Installer 和 Installshield 具有一些 Java 功能。 WiX 也可以执行您列出的操作,因为该列表本质上是标准 MSI 功能(这些工具编译为输出 - 其中一些可以输出非标准 EXE 文件)。

标签: java java-8 windows-installer


【解决方案1】:

JDK 8 捆绑了一个名为 javapackager(以前称为 javafxpackager)的工具,它是 JavaFX 的一部分。但是,您可以使用它打包 java swing 应用程序而不使用 JavaFX。该工具可以生成包含应用程序和 Java 运行时的安装程序文件(exemsi)。

这是一个例子:

javapackager -deploy -native exe -Bruntime="C:\Program Files\Java\jdk1.8.0_66\jre" -Bicon=app_icon.ico -BsystemWide=true -BshortcutHint=true -outdir packages -outfile appFile -srcdir dist -srcfiles MyApp.jar;COPYING.txt -appclass somePackage.MainClass -BlicenseFile=COPYING.txt -name appName -title "应用名称"

欲了解更多信息,请参阅adding icon to bundle using javapackager


还有一个基于javapackagernew tool called jpackage。建议与下一个 JDK 版本 JDK 14 一起发布。请注意,自 JDK 11 以来,javapackager 作为 JavaFX 删除的一部分已从 JDK 中删除。

A Brief Example Using the Early Access jpackage Utility

【讨论】:

  • 感谢@Eng.Fouad (+1) -- 理想情况下,我想使用 Launch4J 为我构建一个 Windows 原生 EXE,然后使用不同的工具(例如这个 javapackager)来分别为我构建一个 Windows MSI。你知道这是否可行吗?再次感谢!
  • @hotmeatballsoup javapackager 生成一个安装程序文件,可以将应用程序安装在程序文件夹中,创建桌面快捷方式,并在“程序和功能”中添加记录,以便用户可以卸载它。桌面快捷方式将指向启动应用程序的 exe 文件。
  • 再次感谢@Eng.Fouad(再次+1)如果可以的话,请再问您几个后续问题:(1) 只是为了确认(为了赏金!):我应该能够使用 Launch4J(或任何其他工具)构建 EXE,然后使用 javapackager 构建 MSI,正确吗?
  • @hotmeatballsoup 不需要Launch4J,因为javapackager 已经为您生成了exe。您需要在 Windows 上运行该工具才能生成 msi/exe 安装程序文件。如果您需要制作 Mac 安装程序,则需要在 Mac 上运行该工具,以此类推。
  • 无需在目标机器上安装 JRE,因为它与安装程序文件捆绑在一起,将与应用程序 jar 一起安装在客户端机器上。
【解决方案2】:

工具:一些部署工具信息:


高级安装程序:如上面评论中所述,您可以使用Advanced Installer 在 Windows 和 Mac 上安装 Java 应用程序(不支持 Linux)。

视频:以下是来自Advanced Installer(商业工具)的一些关于 Java 安装的视频:

教程(阅读):打包您的Java application for WindowsMac OSJava landing page.


题外话:不是 Java 本身 - 有一个略读。使用各种部署技术自动更新应用程序:What is the best practice to auto upgrade MSI based application?


链接

旧:How can I convert my Java program to an .exe file?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多