Попытка сгенерировать hardwareID в C# и получение исключения System.Management.ManagementPath - PullRequest
0 голосов
/ 28 мая 2020

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

Насколько я понимаю, мне нужно чтобы получить некоторые значения (уникальные), чтобы мое программное обеспечение могло работать только на машине, имеющей эту комбинацию идентификаторов, для этого я могу получить доступ к «Win32_Processor» (я попытаюсь запустить для processId, а затем добавить некоторые другие части как материнская плата или что-то еще).

Для этого я запускаю задачу, которая ищет идентификатор процессора с WMI, но когда я пытаюсь скомпилировать, я получаю исключение.

Это часть кода где я его получил (ошибка в первом предложении):

Task task = Task.Run(() =>
{
ManagementObjectSearcher cpu = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
ManagementObjectCollection cpu_Collection = cpu.Get();
foreach (ManagementObject obj in cpu_Collection)
{
...
}

"System.TypeInitializationException: 'Инициализатор типа для' System.Management.ManagementPath 'вызвал исключение. ' "NullReferenceException: ссылка на объект не соответствует экземпляру объекта.

И значение cpu получает значение null, поэтому я думаю, что проблема

У меня много System.Management.dll, и я импортировал разные, чтобы посмотреть, не проблема ли в этом, искал ответы в Google, но не смог их найти или понять (так как я начинаю с этого топа c).

Чтобы предоставить дополнительную информацию, я получаю и другие вещи (это на испанском языке sh):

La excepción se generó originalmente en esta pila de llamadas:

System.Management.MTAHelper.IsNoContextMTA()
System.Management.MTAHelper.CreateInMTA(System.Type)
System.Management.ManagementPath.CreateWbemPath(string)
System.Management.ManagementPath.ManagementPath(string)
System.Management.ManagementPath.ManagementPath()

Я подозреваю, что System.Management.dll - это проблема, но я не могу найти тот, который работает

Также я пытаюсь открыть wbemtest и подключиться к root \ cimv2 без проблем, когда я перехожу к запросу SELECT * FROM Win32_Processor, я получаю его без проблем.

Спасибо, если мне нужно показать больше моего кода, просто скажите мне

EDIT:

все, что я сделал для получения идентификатора процессора, находится в частной статике c asyn c задача, которую я назвал

 private static async Task<string> HardwareID()

, когда я хочу сделать ее publi c, чтобы я мог получить ее из моей основной программы класса, я делаю следующее

public static string HardID => HardwareID().Result; 

beign HardID строка publi c, которую я вернул из моей частной задачи HardwareID (), чтобы я мог передать ее моей программе класса как:

  string hwid = classHardID.HardID;

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

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

System.AggregateException: 'Произошла одна или несколько ошибок. (Произошла одна или несколько ошибок. (Не удалось загрузить файл или сборку System.Management, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a). Эталонные сборки не должны загружаться для выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...