当前位置: 首页 > 面试题库 >

结合使用Launch4J和Java Web Start?

仲孙善
2023-03-14
问题内容

我有一个正常工作的JNLP应用程序,需要分发给各种非技术性最终用户。

如果用户计算机上安装了最新的JVM,则一切正常。他们只需双击我发送给他们的JNLP文件,其余的工作就由Java Web Start完成。

现在,我想分发一些可以使用或不使用JVM的东西,例如,一个.exe文件,如果不存在兼容的JVM,它会自动下载一个兼容的JVM,然后调用javaws.exe该文件以下载.jar文件并启动该应用程序。

Launch4J是我找到的最接近的匹配项,但是它无法通过来启动程序javaws.exe。唯一的选择是javajavaw

我想要一种可以做到的产品:

  • 生成.exe不需要预先安装JVM 的自包含文件
  • 解析.jnlp文件并在必要时确定要下载的正确JVM(我知道Java Web Start可以在必要时下载JVM,但是我想避免下载两个,第一个是引导Java Web Start,第二个是运行应用程序可能需要特定但不同的JVM。)
  • 自动下载并安装JVM, 不仅仅是将用户引导到Java下载页面或打开新的安装向导。
  • 如有必要,提示您输入管理员密码(获得安装JVM的权限。我认为Sun JVM安装程序未内置此密码。)
  • 仅显示一个安全对话框(我只想提示用户一次,以确认他们信任生成的.exe,但是我不希望再次出现提示,以确认他们信任.jar来自相同来源并使用相同证书签名的文件。)我认为这将要求自动下载器在启动JWS之前安装证书。)
  • (不是必需的).jar与JVM同时在后台下载应用程序资源(例如文件)。这将要求在安装JVM之前先运行高速缓存,因此必须以本机代码实现高速缓存,并在DownloadService以后使用JNI对其进行接口。

是否存在这样的产品?我怀疑不是,但是值得一试。

更新, 我发现本文具有针对一些相关问题的解决方案,尽管它是为脱机安装而html" target="_blank">设计的,并且我主要关注在线安装。


问题答案:

我遇到了同样的问题。我最终得到了BAT,Shell和最终的Mac版DMG。

我在使用Nullsoft安装程序的Windows自动安装JRE安装中找到了以下注释:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

我认为在JNLP之外,您将很难获得所有平台的自动化。但是,在我的项目中,长达两年的时间,我还没有看到用户必须自己获取Java的抱怨。我相信大多数机器都会拥有它。Windows用户抱怨没有快捷方式,但是使用vbs很容易做到。

同样在Mac DMG
AppBundle上,它们是指定JRE的方法。除非是基于PowerPC的较旧计算机,否则Mac将具有最新版本。在这种情况下,没有Java6。

最终您会得到几个启动器,我建议您使用自动更新策略。



 类似资料:
  • 问题内容: 大约几个小时前,我在Stack Overflow上询问了有关如何将char []转换为MD5哈希的方法。 Neil Smithline建议我使用BCrypt,但不能将其与char []一起使用。 我使用char []来存储从登录表单中检索到的密码的原因是因为仅支持char []。 当前,我正在尝试使用上面的代码生成哈希,但是由于变量passwordCars的类型为char [],因此不

  • 问题内容: Node.js非常适合我们的Web项目,但是很少有需要Python的计算任务。我们已经为他们准备了Python代码。我们非常关心速度,如何以异步非阻塞方式从node.js调用Python“工人”的最优雅方法是什么? 问题答案: 对于node.js和Python服务器之间的通信,如果两个进程都在同一服务器上运行,则我将使用Unix套接字,否则将使用TCP / IP套接字。对于封送处理协议

  • 问题内容: 我正在尝试在我的应用程序中通过turbolinks使用Angularjs框架。页面更改后,请勿初始化新的事件监听器。有什么办法可以使其工作吗?提前致谢! 问题答案: AngularJS与Turbolinks Turbolink 和 AnguluarJS 都可以用来使Web应用程序更快地响应,在某种意义上,响应用户交互,网页上发生了某些事情,而无需重新加载和重新呈现整个页面。 它们在以下

  • 问题内容: 我希望能够在具有许多s的复杂SQL查询中使用PostgreSQL中的函数。这是查询示例: 我想在这里删除该表,因为我的表具有一个名为 taglist* 的 整数数组 字段,该字段由所有链接的tag id组成。 * 我尝试了以下操作: 此方法有效,但带来的结果与第一个查询不同。 所以我要做的是在查询中使用的结果来补偿表。 我怎样才能做到这一点? UPDATE: 与提及的标记ID的列表相同

  • 问题内容: 我正在尝试遵循Elasticsearch 5官方文档来设置传输客户端: https://www.elastic.co/guide/zh-CN/elasticsearch/client/java- api/5.0/transport- client.html 但是,使用包org.elasticsearch:elasticsearch:5.0.0-rc1时,类PreBuiltTranspo

  • 问题内容: 选择下拉列表选项时,有什么方法可以刷新页面的某些部分(例如div / span)?请注意,我使用的是razor语法。 如果是,那么请提供一些示例代码。 问题答案: 是的,您可以订阅活动。 可能是这样(真实示例): 然后具有此javascript函数(或类似功能) 编辑:此示例假设您使用的是非侵入式验证(因此使用jQuery),并且想要提交表单,但是显然您可以为onchange事件调用任