我有一个工作的JNLP应用程序,我需要分发给各种非技术终端用户。
如果用户的机器安装了最近的JVM,那么一切都很好。他们只需双击我发送给他们的JNLP文件,剩下的就由完成。
现在,我想分发一些与JVM一起工作或不使用JVM的东西,例如一个.exe文件,如果没有一个兼容的JVM,就自动下载一个兼容的JVM,然后调用javaws.exe下载.jar文件并启动应用程序。
Launch4J是我发现的最接近的匹配,但它不能通过javaws.exe启动程序。唯一的选项是java和javaw
我想要一种可以:
.exe文件。.jnlp文件并在必要时确定要下载的JVM (我知道Java可以在必要时下载JVM,但我希望避免需要下载两个JVM,第一个用于引导Java,第二个用于运行可能需要特定但不同JVM的应用程序)。.exe,但我不希望第二个提示来确认他们信任来自同一个来源并使用相同证书签名的.jar文件)。我假设这将需要自动下载程序在启动JWS之前安装证书。).jar文件)。这将要求在安装JVM之前运行缓存,因此缓存必须以本机代码实现,DownloadService稍后将使用JNI与其接口。像这样的产品存在吗?我怀疑没有,但值得一试。
Update I找到了解决相关问题的这篇文章,尽管它是为脱机安装而设计的,我主要关注的是在线安装。
发布于 2010-08-11 11:58:41
我也遇到过同样的问题。最后,我得到了一只蝙蝠,一只壳牌,并最终获得了Mac的DMG。
我发现了关于使用Nullsoft安装程序自动安装Windows的JRE的评论:
安装
我认为在JNLP之外,您会发现很难实现所有平台的自动化。然而,在我的项目中,长达两年的时间里,我还没有看到用户不得不自己获得java的抱怨。我相信大多数机器都已经有了。Windows用户抱怨没有快捷方式,但这很容易使用vbs。
同样在Mac上,它们也是指定JRE的方法。Mac将拥有最新的版本,除非是较旧的基于PowerPC的机器。在这种情况下,没有Java6。
在你们中,有几个发射器,我会推荐一种自动更新策略。
发布于 2012-01-04 00:01:55
我一直能够做到这一点&在生产中使用它。
编写一个简单的引导类,jar,然后Launch4j这个jar。
下面是简单引导类的主要内容:
public static void main(String[] args) {
try {
final File jnlp = File.createTempFile("temp", ".jnlp");
final URL url = new URL("http://yourjnlp-wherever-youre-hostingit.jnlp");
yourCopyStreamMethodYouWrote(url.openStream(),new FileOutputStream(jnlp));
Desktop.getDesktop().open(jnlp);
} catch (final Throwable t) {
// do something useful here
}
}发布于 2010-08-11 14:21:39
您还可以考虑使用Excelsior编译您的项目。除了所有其他的东西,它还创造了一个自给自足的合理大小的分布。
https://stackoverflow.com/questions/3380184
复制相似问题