我无法从服务中读取注册表值

时间:2011-03-20 17:35:09

标签: .net vb.net windows-services registry

在我的服务中,我有以下功能,以便从我的注册表中获取一些值:

 Public Function GetKeyValue(ByVal nKey As String, ByVal sPath As String) As String
        Dim RegKey As RegistryKey
        Dim kValue As String = Nothing
        Dim Pos As String
        If CheckRegistry(sPath) Then
            Try
                RegKey = Registry.CurrentUser.OpenSubKey(sPath)
                kValue = CStr(RegKey.GetValue(nKey))

            Catch ex As Exception
                StartLogFile(" GetKeyValue " & vbNewLine & "Stack Trace= " & ex.StackTrace, EventLogEntryType.Warning)
            End Try
        End If
        Return kValue
    End Function

同样的功能在Windows窗体中正常工作,但是如果我从服务调用那么她就无法读取该值。 有谁知道发生了什么事?

3 个答案:

答案 0 :(得分:4)

您不应将数据存储在HKEY_CURRENT_USER中,而应存放在HKEY_LOCAL_MACHINE下,这对于Windows服务更有意义。

还要注意,您还可以在注册表项上设置权限。还请在尝试阅读时检查。

答案 1 :(得分:3)

您几乎肯定会阅读其他用户的注册表设置。该服务可能作为内置服务用户帐户之一运行:SYSTEM,LOCALSERVICE或NETWORKSERVICE。这些不是交互式用户。

您的设计存在根本缺陷,我怀疑您需要将这些设置移动到不属于用户个人资料的文件中。

答案 2 :(得分:1)

您的服务是否以与Windows窗体应用程序相同的用户身份运行?如果没有,请将其设置为以同一用户身份运行。

您必须将其存储为CurrentMachine。