У меня есть приложение Java Wrapper, которое обращается к записям реестра. (Да, я знаю, странно, а? В случае, если вам интересно, я использую решение Дэвида this question для чтения из реестра с использованием Java.)Неисправность с помощью Java Service Wrapper при запуске из консоли или запустите как службу
Все работает отлично в 32-разрядных версиях Windows. Я могу запускать свое приложение с обеих консолей (используя файл байт Java Wrapper.) И как сервис, установленный из файла bat. Я вижу различные вещи, которые мне нужны из реестра Windows.
Однако в 64-разрядной системе Windows я больше не могу видеть записи реестра, которые мне нужны, когда я запускаю приложение в качестве службы; все записи выглядят как null. Однако он все еще работает в консоли!
Моя гипотеза заключается в том, что при запуске с консоли (как административный пользователь, в случае ее значимости), Java Service Wrapper запускает 64-разрядную JVM и имеет доступ к регулярному 64-разрядному реестру. Затем, когда он запускается как служба (через пользователя LOCALSYSTEM), он запускает 32-разрядную JVM (которая затем попытается получить доступ к специальному 32-разрядному реестру oh-so-s на узле Wow6432bit. Записи, которые я ищу, это отсутствующий на этом узле, который затем объяснит, почему я получаю в этом случае нулевые значения.
Это приводит к моему вопросу: почему на Земле Java Wrapper запустит 32-разрядную JVM при запуске через список сервисов и почему бы это начать 64-разрядную JVM при запуске из консоли
ПРИМЕЧАНИЯ: Я использую Java Service Wrapper 3.5.14 и в моей конфиге у меня есть
wrapper.java.additional.auto_bits=TRUE
В идеале я хотел бы, чтобы выбор JVM был автоматическим, поэтому я могу использовать один установщик для развертывания моего программного обеспечения как в 32-битной, так и в 64-разрядной системах. (Это одна из причин, по которой я решил использовать JSW поверх Tomcat.)
Большое спасибо за чтение.
добро пожаловать :) – Naytzyrhc