【发布时间】:2011-08-18 20:00:19
【问题描述】:
我有一个 NSIS 安装程序,它必须检查系统中是否安装了 java,如果没有,它必须静默安装。它还必须返回java的路径,因为我必须创建JAVA_HOME环境变量。
这是我编写的用于检查 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 的路径,一切正常)
但是,一切都可以在 32 位操作系统上完美运行。但是,当我在 64 位系统上运行安装程序时,该服务无法启动,返回错误 1067。
一开始我以为FindJava函数不能正常工作,导致服务安装错误,但我把所有结果都发送到了消息框中,结果和预期的完全一样。
不幸的是,问题出在那个函数上。我删除了这个函数,我对 $JavaInstallationPath 进行了硬编码,并且安装程序正常工作。
我真的不知道出了什么问题。 请帮忙。
【问题讨论】:
-
你有没有得到这个?我正在寻找相同的东西