程序无法从注册表运行项启动

程序无法从注册表运行项启动

我有一个使用 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

现在,记事本会在启动时启动。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

我已确认从资源管理器窗口或 cmd.exe 调用 launch.vbs 可以按预期工作(启动我的程序)。msconfig 确认 C:\MyCompany\Program\launch.vbs 已列在启动选项卡中。文件属性的安全选项卡指示所有用户都应具有读取和执行权限。同样,run.cmd 也确实被调用了。

此时我不知道为什么我的程序没有启动,而且我找不到一种有效的方法来调试它。

系统是Windows 7 Professional 64位。

答案1

在 LPChip 的帮助下,我开始了消息框调试,并确认脚本正在启动,但出现错误。我将 launch.vbs 更新为

CreateObject("Wscript.Shell").Run "cmd /k " & chr(34) & "C:\MyCompany\Program\run.cmd " & chr(34), 1, True

(请注意 /k 使窗口保持活动状态,1 则显示)。由此可见,java 未设置在通过 CurrentVersion\Run 启动的脚本的类路径上。在 run.cmd 中对 java 路径进行硬编码(我们的客户端无论如何都必须使用它)解决了这个问题。

相关内容