none
如何判断注册表中是否存在某个项? RRS feed

  • 问题

  •    register和registerkey类都提供了getvalue方法,但是有没有办法判断是否存在某个注册表项呢?因为有的注册表项在某一情况下存在,在某一情况下又不存在,如果直接用getvlaue方法就可能导致空引用的错误..
    2009年11月14日 8:29

答案

  •         For Each Item As String In regkeys
                'If Item = "我的程序" Then MsgBox("该启动项存在")
                '就是项的名称,并不是键值呀
                ComboBox1.Items.Add(Item)
            Next
    • 已标记为答案 picat 2009年11月14日 9:32
    2009年11月14日 9:01
  • 你好!
         上面的代码稍微改一下就可以了,把GetValueNames方法换成GetSubKeyNames就可以了!

    周雪峰
    • 已标记为答案 picat 2009年11月14日 9:32
    2009年11月14日 9:05
    版主

全部回复

  • Public Class Form1
        Private regedit As Microsoft.Win32.RegistryKey
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            regedit = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
            Dim regkeys() As String
            regkeys = regedit.GetValueNames
            For Each Item As String In regkeys
                If Item = "我的程序" Then MsgBox("该启动项存在")
            Next
        End Sub
    End Class
    我是这样判断的,不知道是不是适合你。
    2009年11月14日 8:51
  • Public Class Form1
    
        Private regedit As Microsoft.Win32.RegistryKey
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            regedit = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
    
            Dim regkeys() As String
    
            regkeys = regedit.GetValueNames
    
            For Each Item As String In regkeys
    
                If Item = "我的程序" Then MsgBox("该启动项存在")
    
            Next
    
        End Sub
    
    End Class
    
    
    我是这样判断的,不知道是不是适合你。

        谢谢,不过我要判断的是注册表项,而不是具体的键值,所以用这个方法不行.
        在上例里,比如"Software\Microsoft\Windows\CurrentVersion\Run"下,我想判断还有没有别的项,而不是键值.
    2009年11月14日 8:57
  •         For Each Item As String In regkeys
                'If Item = "我的程序" Then MsgBox("该启动项存在")
                '就是项的名称,并不是键值呀
                ComboBox1.Items.Add(Item)
            Next
    • 已标记为答案 picat 2009年11月14日 9:32
    2009年11月14日 9:01
  • 你好!
         上面的代码稍微改一下就可以了,把GetValueNames方法换成GetSubKeyNames就可以了!

    周雪峰
    • 已标记为答案 picat 2009年11月14日 9:32
    2009年11月14日 9:05
    版主
  •         For Each Item As String In regkeys
                'If Item = "我的程序" Then MsgBox("该启动项存在")
                '就是项的名称,并不是键值呀
                ComboBox1.Items.Add(Item)
            Next


      嗯,刚才看错了,这个方法可行.
      不过我用的是下面的方法:

      regedit = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run\TEST")
      if regedit is nothing then
           msgbox("该项不存在!")
      end if 
      
      OpenSubKey在找不到子项的时候居然不会报错,这样就可以用 is nothing来判断了,嘿嘿
    2009年11月14日 9:32