在使用Izpack 5 Beta 11的测试机器上,如果我使用运行捆绑的64位java的64位winrun4j exe启动install.jar,那么Izpack会抱怨
There is no script engine for file extension ".js",然后抱怨The installer could not launch with administrator permissions,然后尝试安装到默认安装目录失败,因为你没有管理员权限,安装到C:/ Program Files之外的另一个文件夹完成好了
如果我使用运行32位java的32位winrun4j安装程序运行它,它可以正常工作.
如果我只是在没有exe包装器的情况下直接运行install.jar
即java -jar install.jar
它使用32位JVM和64位JVM提供这些错误.
所以我目前唯一可行的解决方案是安装32位exe包装器,但我还需要64位包装器.
所以问题是
跟进
我发现这个线程有关javascript错误(但不是Izpack),并发现.js文件与Utlradedit相关联,Utlradedit是我用来编辑大多数文件类型的编辑器.
简单地将.js与Ultraedit无关联意味着现在我跑步时
它现在有效:)
但64位winrun4j现在无法启动安装并且根本无法工作,如果我从命令窗口运行,我可以看到
跑步
wscript C:\Users\MESH\AppData\Local\Temp\Installer.js
c:\Code\WidgetReleases\1.0_Beta_2\widget-windows64\JVM64\bin\javaw.exe
-Dizpack.mode=privileged -jar
C:\Code\WidgetReleases\1.0_Beta_2\widget-windows64\install.jar
Run Code Online (Sandbox Code Playgroud)
他们跑
wscript C:\Users\MESH\AppData\Local\Temp\Installer.js
c:\Code\WidgetReleases\1.0_Beta_2\widget-windows64\JVM64\bin\javaw.exe
abort exit
-Dizpack.mode=privileged -jar
:\Code\WidgetReleases\1.0_Beta_2\widget-windows64\install.jar
Run Code Online (Sandbox Code Playgroud)
所以跟进问题是:
我想在Windows 7上发布Java GUI应用程序.此应用程序使用Swing Toolkit,不需要任何本机代码.使用NSIS安装程序安装该应用程序.我想尽可能地将此应用程序集成到Windows 7中.这意味着:
WinRun4j是一个启动Java应用程序的EXE文件.因为应用程序没有分叉新的Java进程,Windows认为EXE文件是应用程序.所以任务栏没有问题.文件关联有效,因为文件可以简单地与EXE文件关联.
问题:
Launch4J创建了一个32位EXE,它启动了一个外部Java进程来启动Java应用程序.因此,与WinRun4J不同,它也可以启动64位Java.
问题:
System.out.printlnheaderType="gui"无论是否从控制台启动应用程序,都不会打印到控制台.在Windows上,您只需双击JAR文件即可启动该应用程序.安装JRE并不重要,只是工作.但...
问题:
像这样的简单批处理文件可用于启动应用程序:
@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
Run Code Online (Sandbox Code Playgroud)
可以为此批处理文件创建快捷方式以设置自定义图标.
问题:
c:\windows\syswow64,Windows不会自动从批处理文件重定向此调用.使用JAVA_HOME环境变量也是不可取的,因为Java不会自动设置它.可以仅创建启动应用程序的快捷方式,而不是使用批处理文件.它链接到这个命令:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar".如果安装了32位Java JRE,Windows会自动将此调用重定向到SysWOW64目录.
问题:
还有另一种解决方案可以满足上述所有要求吗?或者有没有任何技巧来解决上述解决方案的问题?
使用Launch4j解决任务栏固定问题后,看起来是最好的解决方案.Launch4j可以很容易地集成到Maven项目中(使用这个或这个插件),配置非常简单,除了任务栏固定外,一切都是开箱即用的.对于任务栏固定,Java应用程序必须按照此问题的答案中的说明设置appModelUserId .
此外,Java应用程序必须由安装程序安装,安装程序必须至少安装一个指向EXE的快捷方式.此快捷方式还必须包含appModelUserId.使用NSIS,可以使用WinShell插件 …
我读了SO q&a关于启动java作为windows服务包装器,但无法找到/选择产品,适合我的要求:
Wrapper从配置文件中读取所有Java启动参数.在注册表中必须只有命令来运行包装器本身 - exe的路径和可能的配置路径.始终授予管理员权限以更改注册表中的应用参数是不舒服的.
工作目录和应用程序的路径也必须在配置中.我想将所有包装器文件深入到程序中,因为用户并不感兴趣.
没有依赖项(.net,python等).我不想扩展我的程序的要求.
每个Windows操作系统都免费,包括win64.
简单轻巧.所有第三方罐子的程序大小为12Mbytes.我不想添加20Mbytes包装器.
如果应用程序进程终止,则自动重启
最好是所有Windows平台的单个exe文件.
我试着通过不同的包装看起来有点累了.最合适的是:
我也试着或者看看:
请告诉我哪些包装适合我的需求?或者我认为上面的包装有问题,其中一些适合我的需要?
我刚刚将我的应用程序从Java8移到了Java10,这是我现在需要添加的一部分
--add-modules java.xml.bind
避免 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
例外.
这在我的批处理文件中工作正常
JVM64\bin\java --add-modules java.xml.bind -cp lib;lang -Xms150m -Xmx400m -jar lib/SongKong-5.7.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
Run Code Online (Sandbox Code Playgroud)
但我不能让我的等效winrun4j .ini文件工作
我试过添加
vmarg.1=--add-modules java.xml.bind
Run Code Online (Sandbox Code Playgroud)
然后试了一下
vmarg.1=--add-modules
vmarg.2=java.xml.bind
Run Code Online (Sandbox Code Playgroud)
但是没有任何效果,从winrun4j运行时我仍然得到NoClassDefFoundError
我在java中创建了一个桌面gui应用程序,并使用WinRun4J创建一个本机Windows启动器.
我的ini文件看起来像这样
working.directory=.
classpath.1=oze.jar
main.class=pl.emag.oze.Run
vm.version.min=1.6
vm.location=.\jre6\bin\client\jvm.dll
log.level=none
java.not.found=Nie znaleziono platformy JAVA
Run Code Online (Sandbox Code Playgroud)
我关闭了控制台日志记录(log.level = none),但它仍然显示其他控制台窗口(屏幕截图标记为红色,后台我的应用程序窗口).怎么预防呢?

有谁知道如何运行WinRun4J服务示例(随软件分发的ServiceTest类)?我在64位Windows 7机器上,并安装了Java 7 JDK和JRE。
我执行了以下操作:
WinRun4J64c.exe到C:\test,将其重命名service64.exeservice.ini到C:\ test,将其重命名service64.ini WinRun4JTest.jar到C:\test。首先,您必须以管理员身份运行命令提示符,否则无法注册服务。因此,在以管理员身份打开的命令提示符中,我输入了命令:
C:\Test>service64.exe --WinRun4J:RegisterService
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。但是,当我进入Windows服务面板以启动服务时,出现错误:
“错误1053:服务未及时响应...”
有任何想法吗?
谢谢