2013-07-13 37 views
0

我想編寫一個程序,檢查註冊表中的Windows服務的起始值,我使用字典(字符串,點)來存儲服務的名稱在註冊表(字符串)和開始值(點)X的默認和真正的起始值爲默認值,Y爲真。使用字典和循環VB.net的最佳做法

Private _defaultRegistryVals As New Dictionary(Of String, Point) 

Public Enum StartupMode 
     Disabled = 0 
     Manual = 1 
     Auto = 2 
     AutoDelayed = 3 
    End Enum 

Private Function Analyze as Boolean 
Dim mostOfRegistryPath As String = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" 
If Not _HasLoaded then 

_defaultRegistryVals.Add("AxInstSV", New Point(StartupMode.Manual, 0)) 
_defaultRegistryVals.Add("SensrSvc", New Point(StartupMode.Manual, 0)) 
_defaultRegistryVals.Add("AeLookupSvc", New Point(StartupMode.Manual, 0)) 

_HasLoaded = True 

End If 

For Each kvp As KeyValuePair(Of String, Point) In _defaultRegistryVals 

Try 

kvp.Value.Y = TryCast(My.Computer.Registry.GetValue (mostOfRegistryPath + kvp.Key),  "Start", Nothing), double) 
Catch ex As Exception 

End Try 

Next kvp 

由於字典是隻讀的,這將是我的計劃,讓開盤價的實際值從註冊表中的每個Windows服務的最佳方式。我應該檢查每個值作爲其添加詞典條目?或者,還有更好的方法?

這不是整個代碼,但它的工作需要一些小竅門。其他大部分代碼只是整個服務列表,而按鈕則用於檢查Windows版本,然後開始分析註冊表。

+0

爲什麼你認爲字典是隻讀的?從MSDN開始,[Item](http://msdn.microsoft.com/zh-cn/library/9tee9ht2.aspx)'獲取或設置與指定鍵關聯的值。 – Neolisk

+0

它基本上告訴我,我無法改變循環中的值。 這是我得到的錯誤 http://i.imgur.com/cb8nGnD.jpg http://i.imgur.com/5O6bnbr.jpg – Karma

+0

@Neolisk我用我的代碼得到的錯誤是在兩個Imgur圖片鏈接 – Karma

回答

1

試試下面的代碼

Dim DictionaryKeys1(_defaultRegistryVals.Count - 1) As String 

    _defaultRegistryVals.Keys.CopyTo(DictionaryKeys1, 0) 

    For Each KeyValue In DictionaryKeys1 
     Try 
      Dim RegistryValue1 As String = CStr(My.Computer.Registry.GetValue(mostOfRegistryPath + KeyValue, "Start", Nothing)) 

      If Not RegistryValue1 Is Nothing Then 
       Dim Point1 As New Point 

       Point1.X = _defaultRegistryVals(KeyValue).X 
       Point1.Y = CInt(RegistryValue1) 

       _defaultRegistryVals(KeyValue) = Point1 
      End If 
     Catch ex As Exception 
      MsgBox("Error") 
     End Try 
    Next 
+0

謝謝,它工作 – Karma