在我的服务中,我有以下功能,以便从我的注册表中获取一些值:
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窗体中正常工作,但是如果我从服务调用那么她就无法读取该值。 有谁知道发生了什么事?
答案 0 :(得分:4)
您不应将数据存储在HKEY_CURRENT_USER
中,而应存放在HKEY_LOCAL_MACHINE
下,这对于Windows服务更有意义。
还要注意,您还可以在注册表项上设置权限。还请在尝试阅读时检查。
答案 1 :(得分:3)
您几乎肯定会阅读其他用户的注册表设置。该服务可能作为内置服务用户帐户之一运行:SYSTEM,LOCALSERVICE或NETWORKSERVICE。这些不是交互式用户。
您的设计存在根本缺陷,我怀疑您需要将这些设置移动到不属于用户个人资料的文件中。
答案 2 :(得分:1)
您的服务是否以与Windows窗体应用程序相同的用户身份运行?如果没有,请将其设置为以同一用户身份运行。
您必须将其存储为CurrentMachine。