标签: launch4j

如何将JRE与Launch4j捆绑在一起?

我的计算机上有Launch4J,这是一个很棒的程序.我感兴趣的一个功能是能够在一般.EXE文件中捆绑JRE.但是,我找不到任何描述如何执行此操作的文档.

如何将JRE与EXE捆绑在一起?另外,我在哪里可以运行紧凑的便携式JRE?Oracle上的下载链接用于安装程序包.

java portability exe launch4j

70
推荐指数
3
解决办法
6万
查看次数

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

要求

我想在Windows 7上发布Java GUI应用程序.此应用程序使用Swing Toolkit,不需要任何本机代码.使用NSIS安装程序安装该应用程序.我想尽可能地将此应用程序集成到Windows 7中.这意味着:

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

测试解决方案

WinRun4J

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

问题:

  • 不支持大字体.应用程序窗口是像素缩放的(与谷歌浏览器一样).
  • 必须使用两个不同的EXE文件,具体取决于安装的JRE.因此,当安装64位JRE时,必须使用64位EXE文件启动应用程序.当安装32位JRE时,必须使用另一个EXE.这不是用户友好的,因为当仅安装32位JRE时,用户不理解为什么他必须在64位操作系统上使用32位EXE.

Launch4J

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

问题:

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

在Windows上,您只需双击JAR文件即可启动该应用程序.安装JRE并不重要,只是工作.但...

问题:

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

BAT/CMD

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

@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
Run Code Online (Sandbox Code Playgroud)

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

问题:

  • 启动应用程序时会弹出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插件 …

java windows batch-file launch4j winrun4j

36
推荐指数
2
解决办法
2万
查看次数

将Java应用程序固定到Windows 7任务栏

我使用Launch4j作为我在Windows 7下的Java应用程序的包装器,根据我的理解,本质上它的一个实例javaw.exe依次解释Java代码.因此,在尝试将我的应用程序固定到任务栏时,Windows会反而引脚javaw.exe.如果没有所需的命令行,我的应用程序将无法运行.

将Launch4j应用程序固定到任务栏的结果

如您所见,Windows也没有意识到Java是主机应用程序:应用程序本身被描述为"Java(TM)Platform SE binary".

我尝试更改注册表项HKEY_CLASSES_ROOT\Applications\javaw.exe以添加值IsHostApp.这通过完全禁用我的应用程序的固定来改变行为; 显然不是我想要的.

将javaw.exe指定为宿主应用程序的结果

在阅读了Windows如何解释单个应用程序的实例(以及此问题中讨论的现象)之后,我开始对将应用程序用户模型ID(AppUserModelID)嵌入到我的Java应用程序中感兴趣.

我相信我可以通过传递一个独特AppUserModelID的Windows 来解决这个问题.有一种shell32方法,SetCurrentProcessExplicitAppUserModelID.根据Gregory Pakosz的建议,我实现了它,试图将我的应用程序识别为以下单独的实例javaw.exe:

NativeLibrary lib;
try {
    lib = NativeLibrary.getInstance("shell32");
} catch (Error e) {
    Logger.out.error("Could not load Shell32 library.");
    return;
}
Object[] args = { "Vendor.MyJavaApplication" };
String functionName = "SetCurrentProcessExplicitAppUserModelID";
try {
    Function function = lib.getFunction(functionName);
    int ret = function.invokeInt(args);
    if (ret != 0) {
        Logger.out.error(function.getName() + " returned error …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface taskbar launch4j windows-7

35
推荐指数
2
解决办法
2万
查看次数

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

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

我有一个java应用程序,我创建一个可运行的jar(包括任何其他库,只有一个jar文件).使用launch4j和runnable jar我正在创建一个可执行文件"MyApp.exe".

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

用JNA阅读并实现以下解决方案后

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

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

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

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

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

最后的问题:

  1. Gregory Pakosz与JNA合作设置"应用用户模型ID"(/sf/answers/135018131/)正在为我工​​作.但是,Windows仍然将我的应用程序识别为"javaw.exe"的实例.还有什么我需要做的?
  2. 也许有些窗户或java更新在这里打破了什么?
  3. 我是否真的必须使用提升的用户权限运行我的应用程序?我真的不想......
  4. 我必须在launch4j中设置更多选项吗?
  5. 我是否必须在launch4j中使用清单文件?

java taskbar jna launch4j windows-7

29
推荐指数
1
解决办法
5216
查看次数

Java打包工具 - jsmooth,launch4j,onejar的替代品

我已经使用这三个开源工具来打包我的java应用程序,但它们现在看起来都像放弃了.这三个都是非常好的软件.现在有哪些选择?(或者使用Java进行桌面应用程序开发不再是应用程序开发人员构建和维护这些工具的"热门"市场吗?).

1)exe包装器:jsmooth - 2.5年内没有新的开发 - 不支持64位.launch4j - 一年多没有新开发,支持64位,但你不能签署launch4j创建的exe,所以我更喜欢jsmooth,但它不支持64位.

2)onejar:它有效,但在超过2.5年内没有新的开发或网站更新.因此,如果突然中断了新的Java构建,只想切换到支持/拥有备份计划的东西.

谢谢埃德加

java launch4j

27
推荐指数
4
解决办法
3万
查看次数

如何将JRE捆绑到Java应用程序的EXE中?Launch4j说"运行时丢失或损坏."

我是Java编程的新手,但我一般都熟悉一切是如何工作的.我希望能够将jar文件和jre放入windows可执行文件(exe)中,这样当我分发它时,客户端不需要安装JRE.我应该使用什么程序?

我有launch4j,它似乎正是我想要的,但是当我尝试运行应用程序时,我得到"这个应用程序被配置为使用捆绑的Java运行时环境,但运行时丢失或损坏."

我希望我的应用程序只是一个可运行的exe,而不是安装程序.至少,有人能告诉我如何正确地将一个JRE与launch4j捆绑在一起吗?

java exe jar launch4j

26
推荐指数
3
解决办法
5万
查看次数

当我使用Launch4j添加启动画面时,我收到启动错误("启动应用程序时出错")

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

java splash-screen startup bmp launch4j

18
推荐指数
2
解决办法
5962
查看次数

尝试使用Alakai插件将Launch4j集成到Maven项目中

我正在尝试将安装程序的生成集成为maven编译过程的一部分.

我找到了Alakai的Launch4j 插件.我使用Maven创建了一个简单的Hello World应用程序.我试图使用Alakai提供的配置示例,但是当我编译项目时,我得到:

无法在项目Launch4j上执行目标org.bluestemsoftware.open.maven.plugin:launch4j-plugin:1.5.0.0:launch4j(launch4j):无法构建可执行文件; 请验证您的配置.应用jar不存在. - > [帮助1]

不幸的是,Alakai的文档是有限的,我用谷歌搜索找不到多少.

  • 有谁知道应该在哪里设置Launch4j config.xml?它在项目内吗?它在一个单独的目录中吗?
  • 我需要使用程序集插件吗?
  • 我在我的电脑上安装了Launch4j.我是否需要在pom.xml中指定安装目录?如果有,怎么样?
  • 有没有人有一个可操作的pom.xml示例/示例来共享?

谢谢.

java integration launch4j maven

13
推荐指数
1
解决办法
2万
查看次数

Launch4j中的例外情况

我的build.xml中有以下说明,我收到以下异常.

launch4j:net.sf.launch4j.ExecException:执行失败(1):C:\ Program Files\Launch4j\bin\windres.exe --preprocessor = type -J rc -O coff -F pe-i386 C:\ Windows\TEMP\launch4j2603642297702639520rc C:\ Windows\TEMP\launch4j1179691608441365102o

这是我的构建脚本:

<project basedir="."  default="build" name="Bienvenue"> 
   <!-- Crée le fichier d'installation BienvenueSetup.exe --> 
  <target name="build"> 
  <!-- Création du dossier classes --> 
  <mkdir dir="classes"/> 

  <!-- Compilation des classes du programme --> 
  <javac srcdir="src" destdir="classes" /> 

  <!-- Création du dossier install/lib --> 
  <mkdir dir="install/lib"/> 

  <!-- Création du fichier Bienvenue.jar --> 
  <jar destfile="install/lib/Bienvenue.jar" basedir="classes"/> 

  <!-- Suppression du dossier classes --> 
  <delete dir="classes"/> 

  <!-- Copie du JRE dans …
Run Code Online (Sandbox Code Playgroud)

java launch4j

12
推荐指数
2
解决办法
7927
查看次数

Launch4J - 如何将依赖jar附加到生成的exe

我有一个简单的java项目,需要外部jar.我用netbeans构建它,在Clean和Build命令之后,我可以在dist目录中找到以下结构:

-myApp.jar
-lib/
     library1.jar
     library2.jar
Run Code Online (Sandbox Code Playgroud)

典型的,我会说.

现在,我想将依赖库的myApp.jar作为一个exe分发.这可能吗?我正在尝试使用Launch4J.在GUI中我创建配置文件,在cp部分有一些选项

<cp>lib/swing-layout-1.0.4.jar</cp>
Run Code Online (Sandbox Code Playgroud)

但它似乎是classpath,它是我可以参考我的额外罐子的唯一地方.

创建exe文件后,我在exe中找不到dependend libs(exe可以用winrar打开),因此我的应用程序崩溃了.

我怎样才能使exe文件正确?

谢谢你的帮助.

java jar launch4j

11
推荐指数
2
解决办法
2万
查看次数