У меня есть установщик 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, и установщик сработал.
Я действительно не знаю, что не так.
Пожалуйста, помогите.