Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在windows 7上从windows服务读取HKLM_C#_Registry - Fatal编程技术网

C# 在windows 7上从windows服务读取HKLM

C# 在windows 7上从windows服务读取HKLM,c#,registry,C#,Registry,我需要做的是从windows服务中从HKLM读取特定于应用程序的字符串值。注册表配置单元和值是使用windows窗体添加的,该窗体是用于修改windows服务配置值的工具。我无法从windows服务读取值,“不允许请求的注册表访问”。我试图打开并阅读以下内容: rk = Registry.LocalMachine.OpenSubKey(key, RegistryKeyPermissionCheck.ReadSubTree); if (rk != null) { value = rk.Get

我需要做的是从windows服务中从HKLM读取特定于应用程序的字符串值。注册表配置单元和值是使用windows窗体添加的,该窗体是用于修改windows服务配置值的工具。我无法从windows服务读取值,“不允许请求的注册表访问”。我试图打开并阅读以下内容:

rk = Registry.LocalMachine.OpenSubKey(key, RegistryKeyPermissionCheck.ReadSubTree);
if (rk != null)
{
   value = rk.GetValue(setting).ToString();
}

应用程序和服务是否使用不同的凭据运行?配置应用程序可能应用了注册表虚拟化()


或者,配置应用程序和服务的比特数可能存在差异,并且可以看到注册表()的不同视图。

应用程序和服务是否在不同的凭据下运行?配置应用程序可能应用了注册表虚拟化()


或者,配置应用程序和服务之间可能存在差异,并且可以看到注册表()的不同视图。

我现在使用此代码从Windows.NET服务执行此操作

   public const string REG_KEY_MINE = @"SOFTWARE\Mine\Test";

using (RegistryKey key = Registry.LocalMachine.OpenSubKey(REG_KEY_MINE, false))
{

    UDP_PORT = (int) key.GetValue("UdpPort", 43221);
    TCP_PORT = (int) key.GetValue("TcpPort", 8005);
}

因此,您可能不是在默认管理员权限下运行服务???

我现在使用此代码从Windows.NET服务执行此操作

   public const string REG_KEY_MINE = @"SOFTWARE\Mine\Test";

using (RegistryKey key = Registry.LocalMachine.OpenSubKey(REG_KEY_MINE, false))
{

    UDP_PORT = (int) key.GetValue("UdpPort", 43221);
    TCP_PORT = (int) key.GetValue("TcpPort", 8005);
}

因此,您可能不是在默认管理员权限下运行服务???

您是否也可以发布Winforms应用程序中添加密钥的代码?这显然是一个权限问题,但如果注册表项具有HKLM的默认权限,那么它应该可以工作。它不工作告诉我没有默认权限。我擦了擦水晶球,它说你正在使用“非标准”用户帐户运行服务。LocalSystem和朋友是非常有特权的。运行winform应用程序的帐户通常不是btw。您还可以发布Winforms应用程序中添加密钥的代码吗?这显然是一个权限问题,但如果注册表项具有HKLM的默认权限,那么它应该可以工作。它不工作告诉我没有默认权限。我擦了擦水晶球,它说你正在使用“非标准”用户帐户运行服务。LocalSystem和朋友是非常有特权的。运行winform应用程序的帐户通常不是btw。这是我的猜测(特别是你的猜测#1)是的,似乎是#1。我阻止表单创建这些密钥,并从服务安装包创建密钥。当以管理员身份运行时,仍然可以从表单进行更新。这是我的猜测(特别是你的猜测)是的,似乎是这样。我阻止表单创建这些密钥,并从服务安装包创建密钥。当以管理员身份运行时,仍然可以从表单进行更新。我可以从服务中读取它们。如果您只是读取值,您应该将
false
作为第二个参数传递给
OpenSubKey
。您无需使用管理帐户来阅读HKLM。您完全正确,我可以将此打开为FALSE。我将更新代码。如果您只是在读取值,则应将
false
作为第二个参数传递给
OpenSubKey
。您无需使用管理帐户来阅读HKLM。您完全正确,我可以将此打开为FALSE。我会更新代码。