C # Reg_Binary и BATCH - PullRequest
       9

C # Reg_Binary и BATCH

0 голосов
/ 11 июня 2018

Я фанат BATCH и пытаюсь реализовать мой ключ, используя C # winForms вместо пакета.

Я сделал простой пакетный скрипт:

@echo off
reg add "HKEY_CURRENT_USER\Software\TestProgram\Kool" /f /v "Setting" /t REG_BINARY /d h4h999d27e93f3666188231a018c9d44406136wb 1>nul 2>&1

Который обновляет мой регистрключ не беспокойся вообще.Тем не менее, я хочу попробовать и реализовать тот же результат с C # WinForms, и я считаю, что у меня есть правильная формула, но результат не является правильным.

Я попробовал следующее (после проверки, существует ли reg_binary первым и сначала удалив его):

    private void button1_Click(object sender, EventArgs e)
    {
        if (Registry.GetValue(@"HKEY_CURRENT_USER\Software\TestProgram\Kool", "Setting", null) == null)
        {
            RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\TestProgram\Kool");
            try
            {
                var data = Encoding.Unicode.GetBytes("h4h999d27e93f3666188231a018c9d44406136wb");
                //Storing the values
                key.SetValue("Setting", data, RegistryValueKind.Binary);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
                MessageBox.Show(exc.StackTrace);
            }
            key.Close();

            MessageBox.Show("binary key created");
        }
    else
        {
             MessageBox.Show("error");
        }
   }

Что делает ключ не беспокоящимся, но его формат или результат не совпадают с тем, что я получаю, когда делаю это в пакетном режиме, кто-нибудь может объяснить мне, почему?Я получаю тот же результат, что и когда делаю это с моим командным файлом.

Я чувствую, что упускаю что-то простое, может быть, его неправильные байты, я просто не могу это решить.

Я прочитал их для справки: Записать форматированный шестнадцатеричный блок в реестр в двоичном значении Как извлечь значение REG_BINARY из реестра и преобразовать в строку Как я могу прочитать двоичный файлданные из реестра в байтовый массив Считать Registry_binary и преобразовать в строку

Но все равно безуспешно.

1 Ответ

0 голосов
/ 11 июня 2018

Чтобы создать двоичный ключ, вам нужно передать byte[].Таким образом, вы должны сначала преобразовать шестнадцатеричную строку в байтовый массив, затем добавить значение.

Например:

var path = @"Software\TestProgram\Kool";
var key = Registry.CurrentUser.OpenSubKey(path, true);
if (key == null)
    key = Registry.CurrentUser.CreateSubKey(path, true);
var hex = "d5d000d27e93f3116100224a018c9d00406136c3";
var value = StringToByteArray(hex);
key.SetValue("Setting", value, RegistryValueKind.Binary);

Я использовал StringToByteArray метод, который JaredPar поделился в thisсообщение :

public static byte[] StringToByteArray(string hex) {
    return Enumerable.Range(0, hex.Length)
                     .Where(x => x % 2 == 0)
                     .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                     .ToArray();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...