インターネットのあいまいな部分で答えを見つけました:
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 が、設定したいプロパティが読み取り/書き込み可能であると述べているのに、それを設定するためのコードがどこにもないようであることがわかり、気が狂いそうになりました。
さて、私たちは知っています!:-)
これが誰かに役立つことを願っています。