【问题标题】:Trouble with Java Service Wrapper when run from console vs. run as a service从控制台运行与作为服务运行时 Java Service Wrapper 出现问题
【发布时间】:2012-06-04 03:49:25
【问题描述】:

我有一个访问注册表项的 Java Service Wrapper 应用程序。 (是的,我知道,很奇怪,嗯?如果您想知道,我正在使用 David 的 this question 解决方案使用 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 的原因之一。)

非常感谢您的阅读。

【问题讨论】:

    标签: java windows registry 32bit-64bit java-service-wrapper


    【解决方案1】:

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

    诀窍(我从 Tanuki Software 支持的乐于助人的人那里学到的)是告诉 .bat 文件运行 64 位包装器,如果已知我们在 64- 上运行在 32 位环境中位系统。

    基本上,在 .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
    

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2011-09-25
      相关资源
      最近更新 更多