从控制台运行与作为服务运行时Java服务包装器出现问题

从控制台运行与作为服务运行时Java服务包装器出现问题,java,windows,registry,32bit-64bit,java-service-wrapper,Java,Windows,Registry,32bit 64bit,Java Service Wrapper,我有一个访问注册表项的Java服务包装应用程序。(是的,我知道,很奇怪,嗯?如果你想知道的话,我正在使用David的解决方案使用Java从注册表读取数据。) 在32位版本的Windows上,一切正常。我可以从控制台(使用Java服务包装器的.bat文件)和作为从bat文件安装的服务运行我的应用程序。我可以从Windows注册表中看到我需要的各种东西 但是,在64位Windows系统上,当我将应用程序作为服务运行时,我无法再看到所需的注册表项;所有条目都显示为空。但是,它仍然可以在控制台中工作 我

我有一个访问注册表项的Java服务包装应用程序。(是的,我知道,很奇怪,嗯?如果你想知道的话,我正在使用David的解决方案使用Java从注册表读取数据。)

在32位版本的Windows上,一切正常。我可以从控制台(使用Java服务包装器的.bat文件)和作为从bat文件安装的服务运行我的应用程序。我可以从Windows注册表中看到我需要的各种东西

但是,在64位Windows系统上,当我将应用程序作为服务运行时,我无法再看到所需的注册表项;所有条目都显示为空。但是,它仍然可以在控制台中工作

我的假设是,当从控制台运行时(作为管理用户,如果相关的话),Java服务包装器启动一个64位JVM,并且能够访问常规的64位注册表。然后,当作为服务运行时(通过LOCALSYSTEM用户),它启动一个32位JVM(然后它将尝试访问WOW6432位节点中的oh so特殊32位注册表)。我要查找的条目在此节点中不存在,这将解释为什么在本例中我会为它们获取空值

这就引出了我的问题:为什么Java服务包装器在通过服务列表启动时会启动32位JVM,为什么从控制台启动时会启动64位JVM

注意:我使用的是Java服务包装器3.5.14,在我的配置文件中

wrapper.java.additional.auto_bits=TRUE

理想情况下,我希望自动选择JVM,这样我就可以使用一个安装程序在32位和64位系统上部署我的软件(事实上,这是我选择使用JSW而不是Tomcat的原因之一)


非常感谢阅读。

原来是我的安装程序(我用它来安装和启动服务)是一个32位应用程序,它会导致Java服务包装器.bat文件在安装过程中在32位环境中运行。由于64位系统上没有32位Java,这意味着包装器找不到Java

诀窍(我从Tanuki软件支持部门的帮助人员那里学到)是告诉.bat文件运行64位包装器,如果知道我们在32位环境中运行64位系统

基本上,在.bat文件中,找到这些行并插入指定的行。如果我遇到进一步的问题,我将更新我的答案。但是现在,这个解决方案似乎对我非常有效

rem
rem Decide on the specific Wrapper binary to use (See delta-pack)
rem
if "%PROCESSOR_ARCHITEW6432%"=="AMD64" goto amd64 (<---- insert this line)
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto amd64
if "%PROCESSOR_ARCHITECTURE%"=="IA64" goto ia64
rem
rem决定要使用的特定包装器二进制文件(请参阅delta pack)
雷姆

如果“%PROCESSOR_ARCHITEW6432%”==“AMD64”转到AMD64(结果是我的安装程序(我使用它安装并启动服务)是一个32位应用程序,它会导致Java服务包装器.bat文件在安装过程中在32位环境中运行。由于64位系统上没有32位Java,这意味着包装器找不到Java

诀窍(我从Tanuki软件支持部门的帮助人员那里学到)是告诉.bat文件运行64位包装器,如果知道我们在32位环境中运行64位系统

基本上,在.bat文件中,找到这些行并插入指定的行。如果我遇到进一步的问题,我将更新我的答案。但是现在,这个解决方案似乎对我非常有效

rem
rem Decide on the specific Wrapper binary to use (See delta-pack)
rem
if "%PROCESSOR_ARCHITEW6432%"=="AMD64" goto amd64 (<---- insert this line)
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto amd64
if "%PROCESSOR_ARCHITECTURE%"=="IA64" goto ia64
rem
rem决定要使用的特定包装器二进制文件(请参阅delta pack)
雷姆
如果“%PROCESSOR_architecw6432%”==“AMD64”转到AMD64(