У нас есть веб-приложение Java, установленное в среде Windows. Для создания MSI мы используем коммерческий продукт Advanced Installer. Программа установки устанавливает Tomcat 7, Apache 2.0 и развертывает код нашего приложения.
Во время обновления файлы tomcat обновляются, и служба Tomcat переустанавливается. Мы получаем сообщение о том, что не все файлы могут быть установлены, поэтому после установки необходим перезапуск.
Если игнорировать запрос на перезагрузку, все работает безупречно. Но после перезагрузки компьютера Java больше не работает, и служба Apache Tomcat для Windows не запускается. Даже запуск "java" или "java -version" в каталоге bin JRE приводит к следующей ошибке:
C: \ Program Files \ Java \ jre6 \ bin> Ошибка версии java при инициализации виртуальной машины java / lang / NoClassDefFoundError: java / lang / Object
Наш установщик не изменяет ни один из файлов Java, а только установленные файлы tomcat. Итак, я озадачен тем, что могло заставить Java перестать работать.
Единственный известный способ обхода - полностью переустановить Java и затем перезапустить службу Tomcat. Кто-нибудь знает, что может привести к повреждению Java JRE и отказу только после перезагрузки компьютера? Мы воссоздали эту проблему как в 32-, так и в 64-битных ОС, включая Windows XP, Windows Server 2003 и Windows Server 2008 R2.
В следующем сообщении упоминается то же самое, что и у нас, а именно, что средство обновления Java может повредить Java, если пытается обновить, когда службы работают с использованием Java:
Tomcat 7.0.22 прекращает работу службы Windows из-за обновления JRE
Интересно, запускалось ли у вас обновление Java после установки Tomcat, которое затем вызывает эту проблему.
Ваш установщик может пытаться перезаписать файлы JRE. Проведите сравнение записей реестра JAVA и настроек системного пути между исправной и поврежденной системами. Я предполагаю, что записи реестра были перезаписаны.
Вам нужно проверить свой установщик, перейти каждая вещь что он изменяется и убедитесь, что: