У меня есть программа, которую я устанавливаю с помощью скрипта NSIS. Последний шаг в установщике — записать в реестр ключ Run и запустить программу при запуске. Я подтвердил, что в разделе
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
существует ключ
MyCompany Program - C:\MyCompany\Program\launch.vbs
Я пробовал ключ с кавычками и без, но эффекта не было. Я подтвердил, что реестр считывается из CurrentVersion\Run, добавив
Notepad - C:\windows\notepad.exe
и Notepad теперь запускается при запуске. Скрипт launch.vbs — это однострочный скрипт для запуска скрипта без окна cmd.exe:
'HideBat.vbs from https://superuser.com/questions/140047/how-to-run-a-batch-file-without-launching-a-command-window
CreateObject("Wscript.Shell").Run "cmd /c " & chr(34) & "C:\MyCompany\Program\run.cmd " & chr(34), 0, True
Я подтвердил, что вызов launch.vbs из окна проводника или из cmd.exe работает так, как я и ожидал (запуск моей программы). msconfig подтверждает, что C:\MyCompany\Program\launch.vbs указан на вкладке автозагрузки. Вкладка безопасности в свойствах файла указывает, что все пользователи должны иметь права на чтение и выполнение. То же самое касается и фактического вызова run.cmd.
На данный момент я не понимаю, почему моя программа не запускается, и не могу придумать эффективный способ ее отладки.
Система — Windows 7 Professional 64-бит.
решение1
С помощью LPChip я запустил отладку MessageBox и убедился, что скрипт запускается, но выдает ошибку. Я обновил launch.vbs до
CreateObject("Wscript.Shell").Run "cmd /k " & chr(34) & "C:\MyCompany\Program\run.cmd " & chr(34), 1, True
(обратите внимание на /k, чтобы окно оставалось активным, и 1, чтобы показать). Отсюда стало очевидно, что java не установлен в classpath для скриптов, запускаемых через CurrentVersion\Run. Жесткое кодирование пути к java (который наши клиенты будут вынуждены использовать в любом случае) в run.cmd решило проблему.