首页 > 解决方案 > 注册表测试注册表项值 - C# Visual Studio 2019

问题描述

我一直在尝试测试value注册表项,但没有成功。我尝试了很多建议,但没有成功。我错过了什么?

问题:对于 value = 0 AND value = 1,此代码始终返回 false(而注册表中的实际值是0- 如下面的屏幕截图所示)。

using Microsoft.Win32;

string rpath = @"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\";
string rkey = "EnableLUA";
object value = "0";
            
if ((Registry.GetValue(rpath, rkey, value) == value))
{
    Console.WriteLine("true");
}
else 
{
    Console.WriteLine("false"); 
}

// public static object? GetValue (string keyName, string? valueName, object? defaultValue);
// https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.registry.getvalue?view=net-5.0

我在 Visual Studio 2019 和 .NET 5.0 中使用 C#

注册编辑

标签: c#keyregistry.net-5

解决方案


使用.ToString()方法来比较这些值。

if (Registry.GetValue(rpath, rkey, value).ToString() == value.ToString())
{
    Console.WriteLine("true");
}
else 
{
    Console.WriteLine("false"); 
}

您也可以使用(int)— Cast 运算符。object value = 0;(如果你使用这个,你必须改变..)

更新 :

try
{
    RegistryKey rKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System");
    object rValue = rKey.GetValue("EnableLUA");
    if (rValue == null)
    {
        Console.WriteLine("No such value!");
    }
    else if (rValue.ToString() == "0")
    {
        Console.WriteLine("true");
    }
    else if (rValue.ToString() == "1")
    {
        Console.WriteLine("false"); 
    }
}
catch (NullReferenceException)
{
    Console.WriteLine("No such subkey!");
}

推荐阅读