簡體   English   中英

從控制台運行和作為服務運行時,Java Service Wrapper出現問題

[英]Trouble with Java Service Wrapper when run from console vs. run as a service

我有一個訪問注冊表項的Java Service Wrapper應用程序。 (是的,我知道,很奇怪,是吧?如果您想知道的話,我正在使用David的解決方案來使用Java從注冊表中讀取該問題 。)

在Windows的32位版本上,一切正常。 我可以從控制台(使用Java Service Wrapper的.bat文件)運行應用程序,也可以從bat文件安裝該服務。 我可以從Windows注冊表中看到所需的各種信息。

但是,在64位Windows系統上,將應用程序作為服務運行時,我不再看到所需的注冊表項。 所有條目似乎都為空。 但是,它仍然可以在控制台中使用!

我的假設是,當從控制台運行時(作為管理員,如果需要的話),Java Service Wrapper將啟動64位JVM,並能夠訪問常規的64位注冊表。 然后,當作為服務運行(通過LOCALSYSTEM用戶)時,它將啟動32位JVM(然后它將嘗試訪問Wow6432bit節點中的“如此特殊的32位”注冊表。我正在尋找的條目是這個節點不存在,這將解釋為什么在這種情況下為什么我得到空值。

這引出了我的問題:為什么地球上的Java Service Wrapper通過服務列表啟動時會啟動32位JVM,為什么從控制台啟動時會啟動64位JVM?

注意:我正在使用Java Service Wrapper 3.5.14,在我的配置文件中

wrapper.java.additional.auto_bits=TRUE

理想情況下,我希望自動選擇JVM,因此我可以使用一個安裝程序在32位和64位系統上部署我的軟件。 (實際上,這是我選擇在Tomcat上使用JSW的原因之一。)

非常感謝您的閱讀。

事實證明,我的安裝程序(我用來安裝和啟動服務)是一個32位應用程序,它導致Java Service Wrapper .bat文件在安裝過程中在32位環境中運行。 由於64位系統上沒有32位Java,這意味着包裝器找不到Java。

訣竅(我從Tanuki Software的支持人員那里學到的)是,如果已知我們在64位系統上的32位環境中運行,則告訴.bat文件運行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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM