none
对Jscript操作注册表接口的一点不解 RRS feed

  • 问题

  •   要操作注册表需要通过ActiveX控件调用WScript.shell对象,通过该对象的一些方法来操作。Wshshell对象:可以在本地运行程序、操纵注册表内容、创建快捷方式或访问系统文件夹。操作注册表需要使用 RegRead方法|RegWrite方法|RegDelete方法| 这三个方法。这里的RegWrite方法实际上还担当了创建注册表节点的功能。对于一般的注册表操作,我感觉是够用了。但是我感觉是还缺乏一个查询注册表的接口。因为一般的调用流程是我先查询某个注册表节点是否存在,若不存在则先执行一些额外的操作,若存在则继续其它一些操作。因为缺少这样的接口就无法进行条件判断了。

     

            实际Windows API是提供了这样一个接口的:RegOpenKeyEx。我很奇怪微软为何不提供这个Windows API对应的Jscript接口。


    前无古人,后无来者

    2017年2月20日 10:16

全部回复

  • Hi clever101,

    感谢在MSDN论坛发帖。

    >>但是我感觉是还缺乏一个查询注册表的接口。因为一般的调用流程是我先查询某个注册表节点是否存在,若不存在则先执行一些额外的操作,若存在则继续其它一些操作。因为缺少这样的接口就无法进行条件判断了。

    如果你是通过Windows Scripting Host(而不是浏览器的JavaScript)使用JScript,可以使用WScript.RegRead方法获取特定键的值, 例如:

    var key = 'HKEY_CURRENT_USER\\...'
      , wsh = WScript.CreateObject('WScript.Shell')
      , val = wsh.RegRead(key);
    

    具体内容,可以参考以下文档。

    https://msdn.microsoft.com/en-us/library/9bbdkx3k(v=vs.84).aspx

    希望对你有所帮助。

    Best Regards,

    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年2月21日 1:38
  • 对,是有WScript.RegRead这个接口,但是问题也在这里。当你使用WScript.RegRead这个接口来查询一个并不存在的注册表节点时,JScript会出现异常,实际上这样设计是不合理的。不存在的节点可以通过返回一个null对象来表示。所以JScript归根结底还缺乏一个查询注册表的接口。

    前无古人,后无来者

    2017年2月21日 8:43
  • Hi clever101,

    >>当你使用WScript.RegRead这个接口来查询一个并不存在的注册表节点时,JScript会出现异常,实际上这样设计是不合理的。不存在的节点可以通过返回一个null对象来表示。所以JScript归根结底还缺乏一个查询注册表的接口。

    这个函数确实有这个现象,如果键不存在,RegRead会抛出错误“无法打开注册表项”,或者,对于子项,“无效的根在注册表项”。

    可以通过使用最后一个反斜杠结束strName来指定键名称。 不要包含最后一个反斜杠来指定值名。 值条目有三个部分:其名称,其数据类型及其值。 当您指定键名称(而不是值名称)时,RegRead会返回默认值。这样可以避免异常抛出,影响代码运行。

    如果你仍然对该接口的实现有疑问,你可以到Connect上提出。

    希望可以帮助到你。

    Best Regards,

    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年2月24日 8:45