【问题标题】:NSIS - problems detecting java installation on x64 systemsNSIS - 在 x64 系统上检测 java 安装的问题
【发布时间】: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 进行了硬编码,并且安装程序正常工作。

我真的不知道出了什么问题。 请帮忙。

【问题讨论】:

  • 你有没有得到这个?我正在寻找相同的东西

标签: java service nsis


【解决方案1】:

但是,一切都可以在 32 位操作系统上完美运行。但, 当我在 64 位系统上运行安装程序时,该服务将无法启动, 返回错误 1067。

Windows 退出代码 1067 是指“进程意外终止”。见http://www.chicagotech.net/troubleshooting/exitcode2.htm

我尝试检查在 Windows 64 位上运行 JRuby 是否存在任何问题,并且存在!检查此链接:

http://hype-free.blogspot.com/2011/09/running-jruby-on-64-bit-windows.html

但是,我确实认为如果 JRuby .jar 依赖于当前安装的 Java 运行时使其运行但没有安装 Java 运行时,它可能根本无法运行。

【讨论】:

    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 2014-10-26
    • 2015-09-20
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多