Я создал скрипт NSIS для создания установщика для приложения Rails.Приложение использует JRuby и Java.
В первом разделе установщика я устанавливаю переменные среды: я добавляю jruby \ bin в PATH и создаю переменную JAVA_HOME, которая указывает на Java \ jre6.
!define JRubyBinPath "$PROGRAMFILES\${PRODUCT_PUBLISHER}\JRuby\jruby-1.6.3\bin"
Function SetEnvVars
# set JAVA_HOME
${EnvVarUpdate} $0 "JAVA_HOME" "A" "HKCU" "C:\Program Files\Java\jre6"
# add jruby to Path
${EnvVarUpdate} $0 "Path" "A" "HKLM" "${JRubyBinPath}"
FunctionEnd
Section "Pre" SEC01
Call SetEnvVars
...
SectionEnd
** Все пути верны.**
Во втором разделе программы установки после упаковки всех файлов приложений и файлов JRuby я инициализирую базу данных с помощью следующих команд:
Section "Installer" SEC02
...
SetOutPath $INSTDIR
nsExec::ExecToLog "jruby -S bundle exec rake db:create RAILS_ENV=production"
nsExec::ExecToLog "jruby -S bundle exec rake db:migrate RAILS_ENV=production"
nsExec::ExecToLog "jruby -S bundle exec rake db:seed RAILS_ENV=production"
...
SectionEnd
Проблема заключается в том, чточто когда я запускаю установщик в чистой системе Windows, весь код выполняется правильно, за исключением строк, которые содержат команды, использующие «jruby».Я не получаю сообщение об ошибке в окне установщика, оно просто не выполнит эти строки.
В любом случае, если я выполню эти команды вручную в консоли сразу после завершения установки, все будет работать, как и ожидалось.
Из того, что я видел до сих пор, проблема в том, что установщик не может получить доступ к переменным окружения, пока он не завершит работу.
* То, что я до сих пор делал для решения этой проблемы, - это создание основного установщика Installer.exe (здесь я упаковываю все файлы и задаю переменные среды) и другого исполняемого файла Init.exe, который инициализирует базу данных.Если я вручную запускаю эти исполняемые файлы - сначала Installer.exe, затем Init.exe - приложение устанавливается правильно.Но если я попытаюсь запустить Init.exe из Installer.exe, он не будет работать.
Однако, если бы был способ выполнить команды "jruby" в новом / отличном от потока потоке, который устанавливает переменные окружения, я думаю, что проблема будет решена.Но я все еще не мог найти способ сделать это.
Спасибо.