Làm cách nào để kiểm tra xem giá trị đăng ký có tồn tại bằng C # không?


76

Làm thế nào để kiểm tra xem một giá trị đăng ký tồn tại bằng mã C #? Đây là mã của tôi, tôi muốn kiểm tra xem 'Bắt ​​đầu' có tồn tại hay không.

public static bool checkMachineType()
{
    RegistryKey winLogonKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\services\pcmcia", true);
    string currentKey= winLogonKey.GetValue("Start").ToString();

    if (currentKey == "0")
        return (false);
    return (true);
}

Câu trả lời:


63

Đối với Khóa đăng ký, bạn có thể kiểm tra xem nó có trống không sau khi lấy. Nó sẽ là, nếu nó không tồn tại.

Đối với Giá trị sổ đăng ký, bạn có thể lấy tên Giá trị cho khóa hiện tại và kiểm tra xem mảng này có chứa tên Giá trị cần thiết hay không.

Thí dụ:

public static bool checkMachineType()
{    
    RegistryKey winLogonKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\services\pcmcia", true);
    return (winLogonKey.GetValueNames().Contains("Start"));
}

17
Ví dụ về sau, vì đó là những gì câu hỏi đang yêu cầu?
cja

6
Tôi không thể tin rằng đây là câu trả lời được chấp nhận oO
lewis4u

42
public static bool RegistryValueExists(string hive_HKLM_or_HKCU, string registryRoot, string valueName)
{
    RegistryKey root;
    switch (hive_HKLM_or_HKCU.ToUpper())
    {
        case "HKLM":
            root = Registry.LocalMachine.OpenSubKey(registryRoot, false);
            break;
        case "HKCU":
            root = Registry.CurrentUser.OpenSubKey(registryRoot, false);
            break;
        default:
            throw new System.InvalidOperationException("parameter registryRoot must be either \"HKLM\" or \"HKCU\"");
    }

    return root.GetValue(valueName) != null;
}

28
@hsanders ngay cả khi câu hỏi đã được trả lời, chúng tôi luôn hoan nghênh bạn thêm thông tin hữu ích. Tràn ngăn xếp nhận được rất nhiều lưu lượng truy cập từ Google;)
DonkeyMaster

5
root.GetValue (valueName)! = null ném ngoại lệ nếu valueName không tồn tại.
Farukh

nên thay đổi để trả về gốc? .GetValue (valueName)! = null;
JMIII

Ngoại lệ nào được GetValue ném ra nếu valueName không tồn tại?
BradleyGamiMarques

27
string keyName=@"HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\pcmcia";
string valueName="Start";
if (Registry.GetValue(keyName, valueName, null) == null)
{
     //code if key Not Exist
}
else
{
     //code if key Exist
}

2
  RegistryKey rkSubKey = Registry.CurrentUser.OpenSubKey(" Your Registry Key Location", false);
        if (rkSubKey == null)
        {
           // It doesn't exist
        }
        else
        {
           // It exists and do something if you want to
         }

2
giải pháp này là để kiểm tra xem khóa có tồn tại hay không. để có giá trị, chúng tôi phải kiểm tra danh sách các giá trị trong khóa đó
nhiễu

0
public bool ValueExists(RegistryKey Key, string Value)
{
   try
   {
       return Key.GetValue(Value) != null;
   }
   catch
   {
       return false;
   }
}

Hàm đơn giản này sẽ chỉ trả về true nếu một giá trị được tìm thấy nhưng nó không phải là null, hàm khác sẽ trả về false nếu giá trị tồn tại nhưng nó là null hoặc giá trị không tồn tại trong khóa.


SỬ DỤNG cho câu hỏi của bạn:

if (ValueExists(winLogonKey, "Start")
{
    // The values exists
}
else
{
    // The values does not exists
}

0

Tất nhiên, "Fagner Antunes Dornelles" là chính xác trong câu trả lời của nó. Nhưng đối với tôi, có vẻ như cần phải kiểm tra thêm chi nhánh đăng ký, hoặc chắc chắn về phần chính xác ở đó.

Ví dụ: ("hack bẩn"), tôi cần thiết lập niềm tin vào cơ sở hạ tầng RMS, nếu không khi tôi mở tài liệu Word hoặc Excel, tôi sẽ được nhắc về "Dịch vụ quản lý quyền Active Directory". Đây là cách tôi có thể thêm sự tin cậy từ xa cho các máy chủ của mình trong cơ sở hạ tầng doanh nghiệp.

foreach (var strServer in listServer)
{
    try
    {
        RegistryKey regCurrentUser = Registry.CurrentUser.OpenSubKey($"Software\\Classes\\Local Settings\\Software\\Microsoft\\MSIPC\\{strServer}", false);
        if (regCurrentUser == null)
            throw new ApplicationException("Not found registry SubKey ...");
        if (regCurrentUser.GetValueNames().Contains("UserConsent") == false)
            throw new ApplicationException("Not found value in SubKey ...");
    }
    catch (ApplicationException appEx)
    {
        Console.WriteLine(appEx);
        try
        {
            RegistryKey regCurrentUser = Registry.CurrentUser.OpenSubKey($"Software\\Classes\\Local Settings\\Software\\Microsoft\\MSIPC", true);
            RegistryKey newKey = regCurrentUser.CreateSubKey(strServer, true);
            newKey.SetValue("UserConsent", 1, RegistryValueKind.DWord);
        }
        catch(Exception ex)
        {
            Console.WriteLine($"{ex} Pipec kakoito ...");
        }
    }
}

-4
        internal static Func<string, string, bool> regKey = delegate (string KeyLocation, string Value)
        {
            // get registry key with Microsoft.Win32.Registrys
            RegistryKey rk = (RegistryKey)Registry.GetValue(KeyLocation, Value, null); // KeyLocation and Value variables from method, null object because no default value is present. Must be casted to RegistryKey because method returns object.
            if ((rk) == null) // if the RegistryKey is null which means it does not exist
            {
                // the key does not exist
                return false; // return false because it does not exist
            }
            // the registry key does exist
            return true; // return true because it does exist
        };

sử dụng:

        // usage:
        /* Create Key - while (loading)
        {
            RegistryKey k;
            k = Registry.CurrentUser.CreateSubKey("stuff");
            k.SetValue("value", "value");
            Thread.Sleep(int.MaxValue);
        }; // no need to k.close because exiting control */


        if (regKey(@"HKEY_CURRENT_USER\stuff  ...  ", "value"))
        {
             // key exists
             return;
        }
        // key does not exist

Loại trả về từ GetValuesẽ không bao giờ thuộc loại, RegistryKeyvậy tại sao bạn lại truyền nó?
NetMage
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.