Я использовал приведенный ниже код для консольного приложения в Visual Studio в Windows 8, чтобы вернуть описание и идентификатор устройства подключенных последовательных устройств. Я использовал модифицированную версию этого в приложении, которое я создаю, чтобы автоматически обнаруживать COM-порт Arduino. Он больше не возвращает ничего, так как я сделал новую установку с Windows 10. У меня есть USB-последовательный AVR-программник, который все еще появляется с использованием этого кода. Я проверил реестр, и Arduino указан в SERIALCOMM, Arduino отображается как «USB-последовательный порт (COM6)» под «Ports» (COM & LPT) »в диспетчере устройств, и я могу запрограммировать Arduino с помощью программного обеспечения Arduino. Я понятия не имею, почему он больше не работает.WMI не работает после обновления до Windows 10
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
using System.IO.Ports;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
ManagementScope connectionScope = new ManagementScope();
SelectQuery serialQuery = new SelectQuery("SELECT * FROM Win32_SerialPort");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(connectionScope, serialQuery);
try
{
foreach (ManagementObject item in searcher.Get())
{
string desc = item["Description"].ToString();
string deviceId = item["DeviceID"].ToString();
Console.WriteLine(desc);
Console.WriteLine(deviceId);
}
}
catch (ManagementException e)
{
Console.WriteLine(e.Message);
}
Console.ReadKey();
}
}
}
Это может быть также важно, что при попытке найти решение, которое я нашел следующую реализацию, чтобы найти имена портов с помощью MSSerial_PortName и я получил ошибку доступ.
using System;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
try
{
ManagementObjectSearcher MOSearcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSSerial_PortName");
foreach (ManagementObject MOject in MOSearcher.Get())
{
Console.WriteLine(MOject["PortName"]);
}
}
catch (ManagementException me)
{
Console.WriteLine("An error occurred while querying for WMI data: " + me.Message);
}
Console.ReadKey();
}
}
}
Звучит как проблема аутентификации. Передайте экземпляр ConnectionOptions в свой конструктор ManagementScope, определяя свойства аутентификации и олицетворения. – Juderb
Спасибо @Juderb Я просто использую это локально на своей собственной машине, и я попробовал ваше предложение, и я установил ImpersonationLevel для Impersonate (который является единственным уровнем, на котором он будет работать), и я попробовал все различные параметры для AuthenticationLevel и кода все равно будет только найти мой USB для Serial AVR Programmer, но не мой Arduinos. Добавление AuthenticationLevel и ImpersonationLevel ко второму блоку кода, который я опубликовал, который использует MSSerial_PortName, не имеет никакого значения, я все же получил Access Denied (со всеми различными комбинациями уровней олицетворения и аутентификации). – thoward
Пользователь по умолчанию не может получить доступ к системным устройствам! Нужно запускать как администратор для разделяемой библиотеки или устройств ... – dsgdfg