Как ввести шестнадцатеричное значение в реестре Windows как DWORD? - PullRequest
0 голосов
/ 02 декабря 2018

Я хотел бы изменить ключ реестра с шестнадцатеричным значением ffffffff, которое имеет тип DWORD.У меня есть функция:

public static void EditRegistryKey(string fullKeyName, string subKeyName, 
                                   string keyName, string keyValue, RegistryValueKind keyKind)
            {
                if (Registry.GetValue(fullKeyName, keyName, null) != null)
                {
                    try
                    {
                        RegistryKey myKey = Registry.LocalMachine.OpenSubKey(subKeyName, true);
                        if (myKey != null)
                        {
                            myKey.SetValue(keyName, keyValue, keyKind);
                            myKey.Close();
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceInformation(ex.Message);
                        Console.WriteLine(ex.Message);
                    }
                }
            }

, и когда я пытаюсь:

EditRegistryKey(  @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config",
                @"SYSTEM\CurrentControlSet\Services\W32Time\Config",
                "MaxPosPhaseCorrection",
                "ffffffff",
                RegistryValueKind.DWord);

, я получаю сообщение об ошибке, что разговор не удалось.

1 Ответ

0 голосов
/ 02 декабря 2018

Итак, основываясь на комментарии @Ben Voight, я сделал следующее: изменил тип параметра keyValue на object и преобразовал ffffffff в Int32.Моя функция теперь принимает число или строку.

    public static void EditRegistryKey(string fullKeyName, string subKeyName, 
                                       string keyName, object keyValue, RegistryValueKind keyKind)
                {
                    if (Registry.GetValue(fullKeyName, keyName, null) != null)
                    {
                        try
                        {
                            RegistryKey myKey = Registry.LocalMachine.OpenSubKey(subKeyName, true);
                            if (myKey != null)
                            {
                                myKey.SetValue(keyName, keyValue, keyKind);
                                myKey.Close();
                            }
                        }
                        catch (Exception ex)
                        {
                            Trace.TraceInformation(ex.Message);
                            Console.WriteLine(ex.Message);
                        }
                    }
                }




 EditRegistryKey(@"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config",
                        @"SYSTEM\CurrentControlSet\Services\W32Time\Config",
                        "MaxPosPhaseCorrection",
                        Convert.ToInt32("ffffffff", 16),
                        RegistryValueKind.DWord);

                        //Set syncronization to NTP server
    EditRegistryKey(@"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters",
                    @"SYSTEM\CurrentControlSet\Services\W32Time\Parameters",
                    "Type",
                    "NTP",
                    RegistryValueKind.String);
...