在NSIS中读取注册表项值失败

时间:2015-01-14 08:43:27

标签: nsis

我已经发布了一个类似的问题(NSIS - check if registry key value exists),这个问题的解决方案运作得很好:

ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" "NUL:"

然后:

${If} ${Errors}
#and so on

我在脚本中再做三次同样的事情,读取不同的注册表值和所有尝试但最后一次成功:

ReadRegStr $3 HKLM "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\SomePrinter" "Name"

这总是会返回错误。

我应该采取哪些不同的方式?

我第一次读取注册表值时,使用$0来存储返回值。然后是第二次$1,然后是$2$3

正如我所说的,除了最后一项之外的所有工作。是否与我阅读的注册表项类型有关,还是应该使用不同的变量作为返回值?我尝试了其他变量,但到目前为止还没有任何效果。

感谢您的帮助和提示!

1 个答案:

答案 0 :(得分:2)

的问题
ReadRegStr $3 HKLM "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\SomePrinter" "Name"

是指定根两次:

  • HKLM
  • HKEY_LOCAL_MACHINE\...

从子键名称中删除HKEY_LOCAL_MACHINE,它应该没问题。如果您需要访问注册表的其他部分,请按WriteRegExpandStr manual section中所述更改ReadRegStr的2参数:

    {li> HKCR HKEY_CLASSES_ROOT {li> HKLM HKEY_LOCAL_MACHINE {li> HKCU HKEY_CURRENT_USER {li> HKU HKEY_USERS {li> HKCC HKEY_CURRENT_CONFIG {li> HKDD HKEY_DYN_DATA {li> HKPD HKEY_PERFORMANCE_DATA {li> SHCTX SHELL_CONTEXT