最后我不得不再次访问这个网站,并再次尝试。我发现内置prnport.vbs管理脚本没有问题-通过查看它,我发现在建立其wmi连接时,它具有oseservice.security_u.priveleges.addasstring“seloaddriverprivilege”
C中的解决方案最终指定了wmi connectionoptions并将enableprivileges设置为true。然后主机地址对于未使用或正在使用的端口不再为空。
ConnectionOptions connOptions = new ConnectionOptions();
connOptions.EnablePrivileges = true;
ManagementScope mgmtScope = new ManagementScope("root\\CIMV2", connOptions);
mgmtScope.Connect();
ObjectQuery objQuery = new ObjectQuery("SELECT * FROM Win32_TCPIPPrinterPort");
ManagementObjectSearcher moSearcher = new ManagementObjectSearcher(mgmtScope, objQuery);
foreach (ManagementObject mo in moSearcher.Get())
{
Console.WriteLine(String.Format("PortName={0} HostAddress={1}", mo["Name"], mo["HostAddress"]));
}