我有一个访问注册表项的 Java Service Wrapper 应用程序。(是的,我知道,很奇怪,嗯?如果您想知道,我正在使用 David 对这个问题的解决方案来使用 Java 从注册表中读取数据。)
在 32 位版本的 Windows 上一切正常。我可以从控制台(使用 Java Service Wrapper 的 .bat 文件)和从 bat 文件安装的服务运行我的应用程序。我可以从 Windows 注册表中看到我需要的各种东西。
但是,在 64 位 Windows 系统上,当我将应用程序作为服务运行时,我再也看不到我需要的注册表项;这些条目似乎都为空。但是,它仍然可以在控制台中运行!
我的假设是,当从控制台运行时(作为管理用户,如果相关的话)Java Service Wrapper 会启动一个 64 位 JVM 并能够访问常规的 64 位注册表。然后,当作为服务运行(通过 LOCALSYSTEM 用户)时,它会启动一个 32 位 JVM(然后它会尝试访问 Wow6432bit 节点中的 oh-so-special 32 位注册表。我正在寻找的条目是该节点不存在,这将解释为什么在这种情况下我会为它们获取空值。
这引出了我的问题:为什么 Java Service Wrapper 在通过服务列表启动时会启动 32 位 JVM,为什么从控制台启动时会启动 64 位 JVM?
注意:我使用的是 Java Service Wrapper 3.5.14,在我的配置文件中我有
wrapper.java.additional.auto_bits=TRUE
理想情况下,我希望自动选择 JVM,这样我就可以使用一个安装程序在 32 位和 64 位系统上部署我的软件。(事实上,这是我选择使用 JSW 而不是 Tomcat 的原因之一。)
非常感谢您的阅读。