类似于以下的一行抛出了上述异常:
PrintServer ps = new PrintServer(@"\\prntsrv");
当我在 Windows 上使用“运行...”时,上面的地址确实有效,并将我带到了打印作业列表,那么为什么代码行不起作用?
类似于以下的一行抛出了上述异常:
PrintServer ps = new PrintServer(@"\\prntsrv");
当我在 Windows 上使用“运行...”时,上面的地址确实有效,并将我带到了打印作业列表,那么为什么代码行不起作用?
嘿,我遇到了类似的问题,这是我观察到的并进行了以下更改,请尝试让我知道。
由于系统上缺少 Windows 功能/角色“打印和文档服务”,因此出现此问题。管理多台打印机或打印服务器以及将打印机迁移到其他 Windows 服务器或从其他 Windows 服务器迁移需要此角色。
添加角色转到控制面板->打开或关闭Windows功能->单击复选框“打印和文档服务”->安装。
如果您无法添加此规则,请咨询网络管理员以安装此规则。
添加角色后,您可以创建打印服务器对象并获取相应服务器上的所有打印队列。
显然,该地址\\prntsrv
是 DNS 别名,\\prntserv
构造PrintServer
函数无法处理它。为了解决这个问题,我使用了以下代码(我也可以只使用 catch 块中的代码,它会起作用,但最好不要):
try
{
// Create object to monitor the printer queue
PrintServer printServer = new PrintServer(serverPath);
mPrintQueue = printServer.GetPrintQueue(printerName);
}
catch (PrintServerException ex)
{
// If the problem might be creating the server because the name is an alias
if (ex.Message.Contains("printer name is invalid."))
{
string actualServerHostname = "\\\\" + Dns.GetHostEntry(serverPath.TrimStart('\\')).HostName;
// Create object to monitor the printer queue
PrintServer printServer = new PrintServer(actualServerHostname);
mPrintQueue = printServer.GetPrintQueue(printerName);
// Write to log about the use of a different address
}
else
{
throw;
}
}