我有一個NSIS安裝程序,它必須檢查系統中是否安裝了java,如果沒有,它必須靜默安裝它。它也必須返回到java的路徑,因爲我必須創建JAVA_HOME環境變量。NSIS - 在x64系統上檢測java安裝的問題
這是我寫檢查Java安裝和保存路徑到Java中一個變量的函數:
Var JavaInstallationPath
Function FindJava
StrCpy $1 "SOFTWARE\JavaSoft\Java Runtime Environment"
StrCpy $2 0
ReadRegStr $2 HKLM "$1" "CurrentVersion"
${If} $2 == ""
Goto DetectTry2
${Else}
ReadRegStr $5 HKLM "$1\$2" "JavaHome"
${If} $5 == ""
Goto DetectTry2
${Else}
StrCpy $JavaInstallationPath $5
Messagebox MB_OK "Javahome value: $JavaInstallationPath"
${EndIf}
${EndIf}
DetectTry2:
ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Development Kit" "CurrentVersion"
${If} $2 == ""
Goto NoJava
${Else}
ReadRegStr $5 HKLM "SOFTWARE\JavaSoft\Java Development Kit\$2" "JavaHome"
${If} $5 == ""
Goto NoJava
${Else}
StrCpy $JavaInstallationPath $5
Messagebox MB_OK "Javahome value: $JavaInstallationPath"
${EndIf}
${EndIf}
NoJava:
Messagebox MB_OK "No Java installation detected. Installing Java."
# Install Java
Messagebox MB_OK "Running x32"
ExecWait "$INSTDIR\temp\jre-6u26-windows-i586.exe"
# get jre path value after installation
StrCpy $1 "SOFTWARE\JavaSoft\Java Runtime Environment"
StrCpy $2 0
ReadRegStr $2 HKLM "$1" "CurrentVersion"
ReadRegStr $5 HKLM "$1\$2" "JavaHome"
StrCpy $JavaInstallationPath $5
Messagebox MB_OK "Java installation path: $JavaInstallationPath"
FunctionEnd
在安裝後來我安裝運行Ruby腳本服務:
nsExec::ExecToLog 'jruby "$INSTDIR\Application\install\install_service.rb"'
(裏面有什麼東西是.rb
文件不會產生問題,因爲我試圖硬編碼的路徑,Java和一切就OK的了)
但是,在32位操作系統上,一切正常。但是,當我在64位系統上運行安裝程序,該服務將無法啓動,並返回錯誤1067
起初我以爲FindJava
功能無法正常工作,它引起的安裝故障服務,但我將所有結果都發送到了消息框中,而且它們完全如預期。
不幸的是,問題真的在那個功能。我刪除了函數,我已經硬編碼$ JavaInstallationPath,並且安裝程序工作。
我真的不知道什麼是錯的。 請幫忙。
你有沒有得到這個地方?我正在尋找相同的東西 – Simon