在互联网的一个不起眼的部分找到了答案:
public static void SetPrinterPort(string printerName, string portName)
{
var oManagementScope = new ManagementScope(ManagementPath.DefaultPath);
oManagementScope.Connect();
SelectQuery oSelectQuery = new SelectQuery();
oSelectQuery.QueryString = @"SELECT * FROM Win32_Printer
WHERE Name = '" + printerName.Replace("\\", "\\\\") + "'";
ManagementObjectSearcher oObjectSearcher =
new ManagementObjectSearcher(oManagementScope, @oSelectQuery);
ManagementObjectCollection oObjectCollection = oObjectSearcher.Get();
foreach (ManagementObject oItem in oObjectCollection)
{
oItem.Properties["PortName"].Value = portName;
oItem.Put();
}
}
我很确定最后一部分是您在任何管理对象上设置属性所需的全部内容。我看到 Win32 API 说我想设置的属性是读/写的,但似乎没有任何地方有设置它的代码,这让我发疯了。
那么现在我们知道了!:-)
我希望这对某人有用。