问题标签 [launch4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2003 浏览

windows-7 - 具有特定名称的 launch4j 可执行文件触发 Windows UAC

我正在用 Eclipse 中的 launch4j ANT 任务创建我的 java 程序的 Windows 可执行 EXE 文件,并将其命名为“MyApp.exe”。我需要这个程序在没有管理员身份验证的情况下在 Windows 系统上运行。到目前为止,这行得通。它运行良好,没有任何 UAC 提示。

但是:如果我在我的 launch4j ANT 任务中将此 EXE 重命名为“install.exe”、“setup.exe”或“updater.exe”,则会出现 UAC 图标(右下角覆盖程序图标)并且当我收到 UAC 提示时启动程序(仅在 Windows Vista 或 7 上)。如果我在 Windows 资源管理器中重命名程序,也会发生这种情况。

相同的程序,通过 Windows 资源管理器重命名

似乎文件名中有一些“保留字”会导致 Windows 以提升的访问权限 (UAC) 启动程序。

有人可以确认这个问题吗?我真的不能将我的应用程序命名为“install.exe”或“update.exe”吗?

0 投票
1 回答
2448 浏览

java - 使用 Launch4j,我应该什么时候包装 Jar?

我是 Launch4j 的新手。默认情况下,它“包装”罐子,但有一个复选框显示“不包装罐子,仅启动”。

我什么时候应该勾选这个框?我什么时候不应该选中此框?

0 投票
2 回答
7704 浏览

java - 当我使用 Launch4j 添加启动画面时,出现启动错误(“启动应用程序时发生错误”)

我注意到 Launch4j 的 GUI 似乎更喜欢 bmp 文件,因此我使用Gimp将我的 jpg 文件转换为该格式,但在尝试运行 Launch4j 生成的可执行文件时,我一直收到错误消息。

0 投票
3 回答
2963 浏览

maven - Maven 阴影插件 + Launch4j

我在同一个文件夹中有两个 Maven 项目。一个依赖于另一个,即拥有另一个它的依赖项。现在我想使用 maven shade 插件和launch4j,但对我来说似乎很复杂。

有人可以逐步解释我的情况吗?

所以我有 2 个 POM 文件,每个项目中都有一个。我的多模块文件如下所示:

然后我收到以下错误:在project2中:无法创建阴影工件,项目主工件不存在。

0 投票
5 回答
21411 浏览

java - 在 Windows 7 上启动 Java 应用程序的最佳方式是什么?

要求

我想在 Windows 7 上发布一个 Java GUI 应用程序。这个应用程序使用 Swing Toolkit,不需要任何本机代码。该应用程序是使用NSIS安装程序安装的。我想尽可能好地将这个应用程序集成到 Windows 7 中。这表示:

  • 当应用程序运行时,必须可以将应用程序固定到任务栏。
  • 必须可以将数据文件与应用程序相关联,以便 Windows 使用我的应用程序打开这些文件。
  • 必须自动使用 32 位 Java 运行时和 64 位 Java 运行时。因此,当用户卸载 32 位 Java 并安装 64 位 Java(反之亦然)时,我的应用程序必须仍然可以工作。
  • 必须支持 Windows 的大字体设置。我不是很了解这个功能。我只知道有些应用程序完全忽略了它,其他应用程序(如 Google Chrome)是像素缩放的(看起来真的很难看),而其他应用程序则通过按预期使用更大的字体来支持它(这就是我想要的,通常它可以工作。只有 WinRun4J 解决方案下面提到的不适用于它)。

经过测试的解决方案

WinRun4J

WinRun4j是一个启动 Java 应用程序的 EXE 文件。因为应用程序没有派生新的 Java 进程,Windows 认为 EXE 文件就是应用程序。所以任务栏没有问题。文件关联有效,因为文件可以简单地与 EXE 文件相关联。

问题:

  • 不支持大字体。应用程序窗口改为像素缩放(如 Google Chrome)。
  • 根据安装的 JRE,必须使用两个不同的 EXE 文件。因此,当安装 64 位 JRE 时,必须使用 64 位 EXE 文件启动应用程序。安装 32 位 JRE 插件时,必须使用其他 EXE。这对用户不友好,因为用户不明白为什么在只安装 32 位 JRE 的情况下必须在 64 位操作系统上使用 32 位 EXE。

发射4J

Launch4J创建一个 32 位 EXE,它启动一个外部 Java 进程来启动 Java 应用程序。因此,与 WinRun4J 不同的是,它还可以启动 64 位 Java。

问题:

  • 无法将应用程序固定到任务栏。
  • System.out.printlnheaderType="gui"如果,无论应用程序是否从控制台启动,都不会打印到控制台。

在 Windows 上,您只需双击 JAR 文件即可启动应用程序。安装的 JRE 没关系,简单有效。但...

问题:

  • 应用程序无法固定到任务栏。
  • 无法在开始菜单中创建快捷方式。
  • 无法将文件与 JAR 文件相关联。

BAT/CMD

像这样的简单批处理文件可用于启动应用程序:

可以为此批处理文件创建快捷方式来设置自定义图标。

问题:

  • 启动应用程序时会弹出一个 DOS 窗口。
  • 批处理文件不知道 javaw.exe 的位置。根据安装的 java 版本(32 位或 64 位),它可能位于其中,c:\windows\syswow64并且 Windows 不会自动从批处理文件重定向此调用。使用JAVA_HOME环境变量也是不行的,因为 Java 不会自动设置它。
  • 将文件与批处理文件关联时,无法设置自定义图标。
  • 任务栏支持无法正常工作。当手动启动批处理文件时,可以将应用程序固定到它,但是当双击关联文件时,它就不起作用了。

捷径

可以只创建一个快捷方式来启动应用程序,而不是使用批处理文件。它链接到这个命令:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar". 如果安装了 32 位 Java JRE,Windows 会自动将此调用重定向到 SysWOW64 目录。

问题:

  • 无法将文件与其关联,因为 Windows 仅接受 EXE/COM/PIF/BAT/CMD 文件作为关联目标。LNK 文件不起作用。

问题

是否有另一种解决方案可以满足上述所有要求?或者是否有任何技巧可以解决上述解决方案的问题?

解决方案

在使用Launch4j解决任务栏固定问题之后,看起来是最好的解决方案。Launch4j 可以很容易地集成到一个 Maven 项目中(使用这个这个插件),配置非常简单,除了任务栏固定之外,一切都是开箱即用的。对于任务栏固定,Java 应用程序必须设置一个 appModelUserId,如该问题的答案中所述。

此外,Java 应用程序必须由安装程序安装,该安装程序必须至少安装一个指向 EXE 的快捷方式。此快捷方式还必须包含 appModelUserId。使用 NSIS,这可以通过WinShell 插件和如下配置来完成:

由于某些未知的原因,这个快捷方式只需要存在。你不必使用它。您可以双击 EXE 并且任务栏固定仍然有效。您甚至可以在应用程序文件夹的某个子文件夹中创建快捷方式。删除 EXE 文件的最后一个快捷方式后,任务栏固定停止工作。

0 投票
2 回答
3947 浏览

java - 使用 Launch4j 将 Java 应用程序固定到 Windows 7 任务栏

我目前正在尝试将 Java 应用程序固定到 Windows 7 任务栏。该应用程序使用Launch4j启动。程序图标显示正确,但右键单击任务栏上的图标仅显示带有条目“关闭窗口”的上下文菜单。没有用于将应用程序固定到任务栏的菜单项。将 EXE 文件拖入任务栏也无法正常工作。在任务栏中单击此新启动器时,任务栏中会出现第二个图标。

我按照这两个问题的解决方案的说明来解决问题,但没有帮助:

第二个问题/解决方案中的 JNA 内容会编译并且不会引发任何异常。设置后我可以读取应用程序ID。但我仍然无法将应用程序固定到任务栏。

我在 Github 上创建了一个小型测试应用程序来演示该问题:

https://github.com/kayahr/launch4jtest

该应用程序使用Maven作为构建系统。只需运行mvn package,您将在目标目录中找到一个 ZIP 文件,其中包含 EXE 文件和设置此应用程序 ID 所需的 jna.jar。将此 ZIP 解压缩到某个目录,双击 EXE 并尝试将应用程序固定到任务栏,您会看到问题。

那么这个应用程序有什么问题呢?

0 投票
5 回答
14884 浏览

java - 使用launch4j时如何获取可执行文件的路径?

我正在使用 launch4j 在我的 Windows 应用程序中包装一个可执行的 jar 文件,但我需要通过 JVM 参数传递对它的一些库的引用。有问题的库位于应用程序安装目录中,并且相对于可执行文件始终位于同一位置。

我想告诉launch4j 在JVM 选项中使用可执行相对路径。我知道此信息在 Windows 批处理脚本级别可用,但是如何配置 launch4j 来获取它?

编辑澄清:我正在寻找如何使路径相对于二进制文件本身,而不是如何使它们相对于当前工作目录。两者不一定相同。

0 投票
1 回答
5513 浏览

java - 使用 launch4j 和 maven 包装 java 命令行应用程序

我想使用 maven 和 launch4j 将基于 java 的命令行应用程序及其所有依赖项包装到单个 *.exe 文件中。

现在我已经阅读了所有类似的问题,比如这个这个,但我无法让它工作。

任何人都可以提供一个简单的 pom.xml 片段,如何通过所有需要的依赖项来实现这一点。顺便说一句,我应该在 Eclipse 运行配置中运行什么 Maven 构建目标?

这是我从 SO 复制的内容:

当我在 Eclipse 中运行launch4j:launch4j目标时(如果这是正确的?)我得到:

无法在项目导入器上执行目标 org.bluestemsoftware.open.maven.plugin:launch4j-plugin:1.5.0.0:launch4j (default-cli):目标 org.bluestemsoftware.open.maven 的参数 'headerType'、'jre' .plugin:launch4j-plugin:1.5.0.0:launch4j 丢失或无效 -> [帮助 1]

也许我只是在启动错误的目标......

0 投票
4 回答
5497 浏览

java - 将 Java 可执行文件(使用 launch4j)固定到 Windows 7 任务栏

经过半天的搜索和尝试,我终于放弃了。

我有一个 java 应用程序,我创建了一个可运行的 jar(包括任何其他库并且只有一个 jar 文件)。使用 launch4j 和可运行的 jar,我正在制作一个可执行文件“MyApp.exe”。

可执行文件工作正常,但我想将它固定到我的 Windows 7 任务栏。现在,我只有任务栏条目“关闭窗口”。

在阅读并使用 JNA 实施以下解决方案之后

我的应用程序在 gui 中正确显示它的“应用程序用户模型 ID”(仅用于测试目的)。

但是:我的程序在任务管理器中显示为“javaw.exe”,我仍然无法将其固定到任务栏,即使我设置了 launch4j 选项“自定义进程名称和 XP 样式清单”。

背景信息:我正在使用 Windows 7 管理员帐户,我不希望该应用程序需要管理员权限。

无论如何,如果我从上下文菜单“以管理员身份”启动应用程序并确认 UAC 消息,我现在可以固定到任务栏。但是:即使我正确设置了“应用程序用户模型 ID”,Windows 仍然想要固定“javaw.exe”,即使我的程序现在在 TaskManager 中显示为“MyApp.exe”。

我完全糊涂了。但我显然不是唯一一个遇到这些问题的人。=> 请参阅使用 JNA 获取/设置应用程序标识符中对 Gregory Pakosz 答案的最后评论

最后的问题:

  1. Gregory Pakosz 使用 JNA 设置“应用程序用户模型 ID”(https://stackoverflow.com/a/1928830/1128689)的方式对我有用。但是,Windows 仍将我的应用程序识别为“javaw.exe”的实例。我还需要做什么?
  2. 也许某些 Windows 或 Java 更新在这里破坏了某些东西?
  3. 我真的必须以提升的用户权限运行我的应用程序吗?我真的不想...
  4. launch4j 中是否还有一些我必须设置的选项?
  5. 我必须在 launch4j 中使用清单文件吗?
0 投票
0 回答
5639 浏览

java - Launch4j jre 需要错误

我第一次使用 launch4j,我得到系统编译错误(在 OSX 和 windows xp 上相同)。这是项目 xml 文件:

这是windows xp上的日志:

我也尝试了清单文件并得到了同样的错误。为什么launch4j 需要我的jar 不需要的捆绑JRE?您的帮助将不胜感激