读取WMI类“MSSerial_PortName”的最低权限是什么?

我正在Windows 7信息亭上configuration本地应用程序用户(BUILTIN \ Users的一部分)。 该自助服务terminal具有在虚拟COM端口上运行的特殊USB设备 。 用户需要读取root\WMI命名空间中的WMI类MSSerial_PortNameroot\WMI才能findCOM端口。 在PowerShell(我用来validationconfiguration)

 PS> Get-WmiObject -namespace 'root\WMI' -class 'MSSerial_PortName' 

并通过常规的.NET代码(这是如何编写应用程序)

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSSerial_PortName"); 

我得到“访问被拒绝”的错误,除非以pipe理员身份或提升的会话运行。 我已经阅读了大量关于类似访问问题的问答 ,但大多数似乎build议以pipe理员身份运行。 这不是这个用户/信息亭/configuration的选项。 而且,目前,我无法使用设备供应商的托pipe包装 。

我在Microsoftpipe理控制台中玩过,加载WMI控制,并修改了属性| 安全| 命名空间:Root \ WMI。 我将Users组设置为具有与Administrators组相同的权限。 但是这不起作用(我只是猜测)。

MSSerial_PortName MSSerial “基本”类或名称空间中的其他相关类(如本文build议)中找不到任何MSDN文档。 而且我对WMI安全性还不了解。

我今天打了同样的墙。 这对我暂时工作…

 catch (ManagementException ex) { Debug.WriteLine( string.Format( "##DBG An error occurred while querying for WMI data to find available COM ports:\n Message: {0}\n Stacktrace: {1}", ex.Message, ex.StackTrace) ); bool bSucceed = true; // TODO Q&D solutions. As it does not work as expected (on windows 7 ) we create our ow default list here and check if we can open the ports for (int x = 1; x <= 9; x++) { bSucceed = true; cComportName = string.Format("COM{0}", x); ///////////////////// // Check if we can open it here // Set the port's settings m_comport.BaudRate = 9600; m_comport.DataBits = 8; // int.Parse(cmbDataBits.Text); m_comport.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1" ); m_comport.Parity = (Parity)Enum.Parse(typeof(Parity), "None" ); m_comport.PortName = cComportName; try { // Open the port m_comport.Open(); } catch (UnauthorizedAccessException) { bSucceed = false; } catch (IOException) { bSucceed = false; } catch (ArgumentException) { bSucceed = false; } if (bSucceed) { m_comport.Close(); m_listComPorts.Add(new string[ConstComPortAttr.COMPORT_MAX_COLUMNS] { cComportName, cInstanceName }); } }