DigitalProductId не всегда находит

265
20 августа 2017, 03:14

Пытаюсь получить ключ продукта windows, на win 7 работает нормально, но на других осях не показывает.

using Microsoft.Win32;

Метод для получения ключа продукта windows:

private static readonly string possible_chars = "BCDFGHJKMPQRTVWXY2346789";
public static string getKey(string from = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion", string valueName = "DigitalProductId")
{
    RegistryKey hive = null;
    RegistryKey key = null;
    try
    {
        var result = string.Empty;
        hive = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine,
        Environment.MachineName);
        key = hive.OpenSubKey(from, false);
        var k = RegistryValueKind.Unknown;
        try
        {
            k = key.GetValueKind(valueName);
        }
        catch (Exception) { }
        if (k == RegistryValueKind.Unknown)
        {
            key.Close();
            hive.Close();
            hive = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
            key = hive.OpenSubKey(from, false);
            try
            {
                k = key.GetValueKind(valueName);
            }
            catch (Exception) { } 
        }
        if (k == RegistryValueKind.Binary)
        {
            var pivot = 0;
            var bytes = (byte[])key.GetValue(valueName);
            var ints = new int[16];
            for (var i = 52; i < 67; ++i)
            {
                ints[i - 52] = bytes[i];
            }
            for (var i = 0; i < 25; ++i)
            {
                pivot = 0;
                for (var j = 14; j >= 0; --j)
                {
                    pivot <<= 8;
                    pivot ^= ints[j];
                    ints[j] = ((int)Math.Truncate(pivot / 24.0));
                    pivot %= 24;
                }
                result = possible_chars[pivot] + result;
                if ((i % 5 == 4) && (i != 24))
                {
                    result = "-" + result;
                }
            }
        }
        return result;
    }
    catch (Exception) { return null; }
    finally
    {
        key?.Close();
        hive?.Close();
    }
}

У кого есть терпение и стальные нервы, помогите отредактировать его с использование using может он заработает на других пк =)

READ ALSO
Не публикуется asp.net core проект

Не публикуется asp.net core проект

Поставил VS2017 pro, обнаружил, что не работает кнопка опубликовать, те

242
Замена буквы в строке

Замена буквы в строке

Есть алфавит, например, string alfabet="abc"; Далееесть 1

331
Почему аллокация памяти в языках со сборкой мусора быстрее, чем в языках без них?

Почему аллокация памяти в языках со сборкой мусора быстрее, чем в языках без них?

Уже не первый раз слышу, что скорость аллокации в куче в C# или Java быстрее, чем в C++Я не могу понять, почему это может быть: аллокация в куче подразумевает...

354
Как запустить консольное приложение c# на сервере

Как запустить консольное приложение c# на сервере

охайо, написал телеграмм бота который выборочно автопостит из группы вк в канал(вебхуки и обработка сообщений не нужна)Бот написан шарповским...

374