使用自定义 MSI 更新 Web 应用程序堆栈后 Java JRE 损坏

使用自定义 MSI 更新 Web 应用程序堆栈后 Java JRE 损坏

我们有一个安装在 Windows 环境中的 Java Web 应用程序。我们使用商业产品 Advanced Installer 来构建 MSI。安装程序会安装 Tomcat 7、Apache 2.0 并部署我们的应用程序代码。

在升级过程中,tomcat 文件会更新,tomcat 服务会重新安装。我们收到一条通知,提示并非所有文件都可安装,因此安装后需要重新启动。

如果我们忽略重启提示,一切都会顺利运行。但是,一旦计算机重新启动,Java 就不再起作用,Apache Tomcat Windows 服务也不会启动。即使在 JRE bin 目录中运行“java”或“java -version”也会导致以下错误:

C:\Program Files\Java\jre6\bin>java -version VM 初始化期间发生错误 java/lang/NoClassDefFoundError: java/lang/Object

我们的安装程序不会修改任何 Java 文件,只会修改已安装的 tomcat 文件。因此,我很困惑是什么原因导致 Java 停止工作。

唯一已知的解决方法是完全重新安装 Java,然后重新启动 Tomcat 服务。有人知道是什么原因导致 Java JRE 损坏并且仅在计算机重新启动后才会失败吗?我们在 32 位和 64 位操作系统(包括 Windows XP、Windows Server 2003 和 Windows Server 2008 R2)上重现了此问题。

答案1

您的安装程序可能正在尝试覆盖 JRE 文件。比较正常系统和损坏系统之间的 JAVA 注册表项和系统路径设置。我猜是注册表项已被覆盖。

答案2

以下帖子提到了我们遇到过的同样的事情,即当服务使用 Java 运行时,如果 Java 更新程序尝试进​​行更新,则可能会破坏 Java:

Tomcat 7.0.22 Windows 服务因 JRE 更新而中断

我想知道您是否在安装 Tomcat 后运行了 Java 更新,从而导致了此问题。

答案3

你需要审核你的安装程序,检查一下每件事它会改变并验证:

  • 需求执行该更改
  • 这一改变不会破坏其他任何东西

相关内容