2015-11-09 14 views
0

我有一个非常老的应用程序(2001年出版)我想在Windows 7/8/10工作。它有一个setup.exe部分,它以某种容量使用Java,并且无法正常工作。我怀疑它使用的是java,因为我反编译了与应用程序打包在一起的JAR文件,并且引用了.java文件中的几个设置步骤(以及一个名为setup.java的文件)。也有与应用程序发布以及一个JRE文件夹,运行以下(日期)版本:任何方式来沙箱应用程序依赖于旧的(非工作)版本的JRE?

F:\jre\bin>java -version 
java version "1.3.0_01" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_01) 
Java HotSpot(TM) Client VM (build 1.3.0_01, mixed mode) 

起初我怀疑应用程序正在使用的系统环境变量使用JAVA的当前安装的版本,但我通过从系统中彻底清除JAVA并重新测试来排除这种情况 - 相同的结果。

我接下来试图简单地将文件夹更新到最新版本。但是,正如预期的那样,有些调用不再被支持(错误消息是引用_JVM_IsVMGeneratedMethodl)。

在这一点上,我用尽了选择。我总是可以在虚拟机上运行这个应用程序(并且工作正常),但我宁愿以某种方式将它打包成流畅的方式,以便于分发和安装。 有什么我可以做吗?我一直在思考应用虚拟化方面的一些问题,但仍然在阅读。

回答

2

很难说没有“在那里”,但我猜测旧的(1.3)JVM只是与更现代版本的Windows不兼容。

最好的办法是运行该应用程序,而不是针对该应用程序最初在虚拟机上开发的任何版本的Windows。

如果您有/可以获得完整的源代码,您可以尝试使用当前系统支持的Java版本进行重新编译。但这可能是一个长期的计划。

1

如果包含JRE文件夹,那么你可以跳过安装程序,并添加一些批处理文件,通过这种形式的命令来启动与特定的JRE的.jar:

Java的罐子pathToYourJAR

顺便说一句,你也可以考虑选择转换为可执行文件,一些老在这里提到: How can I convert my Java program to an .exe file? 他们中的一些可能让你选择哪个JRE捆绑/使用

+1

如果安装程序在做其他的东西到系统中,你可以看到它在做什么(可能只是安装s hortcuts到开始菜单等)通过在虚拟机中使用进程监视器(https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx),以便您可以重现这样的行为(比如说是否将某些东西注册表中有可以执行相同操作的Windows命令,或者可以从注册表子树中导出.reg文件,并使用start xx.reg命令将其打开) –

相关问题