NSIS - проблемы с обнаружением установки Java на системах x64 - PullRequest
4 голосов
/ 19 августа 2011

У меня есть установщик 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, и установщик сработал.

Я действительно не знаю, что не так. Пожалуйста, помогите.

1 Ответ

1 голос
/ 12 ноября 2011

Однако в 32-разрядных операционных системах все работает отлично.Но когда я запускаю установщик на 64-разрядных системах, эта служба не запускается, возвращая ошибку 1067.

Код выхода Windows 1067 ссылается на «Процесс неожиданно завершился».См. http://www.chicagotech.net/troubleshooting/exitcode2.htm

Я пытаюсь проверить, есть ли какая-либо проблема с запуском JRuby в 64-битной Windows, и она есть!Проверьте эту ссылку:

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

НоЯ действительно думаю, что если JRuby .jar зависит от установленной в настоящий момент среды выполнения Java, чтобы запустить его, но не установлена ​​среда выполнения Java, он может вообще не работать.

...