2015-01-14 64 views
0

我已经发布了类似的问题(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

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

感谢您的帮助和提示!

回答

2

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

的问题是,您所指定的根两次:

  • HKLM
  • HKEY_LOCAL_MACHINE\...

从子键值名删除HKEY_LOCAL_MACHINE,它应该好的。对于HKEY_USERS

  • HKCRHKEY_CLASSES_ROOT
  • HKLMHKEY_LOCAL_MACHINE
  • HKCUHKEY_CURRENT_USER
  • HKU:如果您需要访问注册表的另一部分,如WriteRegExpandStr manual section描述改变ReadRegStr 2参数
  • HKCC for HKEY_CURRENT_CONFIG
  • HKDDHKEY_DYN_DATA
  • HKPDHKEY_PERFORMANCE_DATA
  • SHCTXSHELL_CONTEXT
+0

你怎么不看这些东西有时是令人难以置信的。我在我的脚本中查询了4次注册表,3次我正确地写入了它,第4次我写了两次根...你会想到会注意到...谢谢! – user3629892

+0

不客气。我们每次都会错过一些事情:o)如果有帮助,请考虑[接受答案](http://meta.stackoverflow。com/a/65088/173356) – Seki