PrintServerException - "... имя неверно", хотя я могу получить доступ к пути из окон
Строка, похожая на следующую, выкинула вышеуказанное исключение:
PrintServer ps = new PrintServer(@"\\prntsrv");
Когда я использую "Выполнить..." в Windows, вышеуказанный адрес работает и выводит меня в список заданий на печать, так почему строка кода не работает?
2 ответа
Видимо, адрес \\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;
}
}
Эй, я столкнулся с подобной проблемой, это то, что я заметил и сделал следующие изменения, просто попробуйте и дайте мне знать.
Эта проблема возникла из-за того, что в системе отсутствует функция / роль Windows "Служба печати и документов". Эта роль требуется для управления несколькими принтерами или серверами печати и миграции принтеров на другие серверы Windows и с них.
Чтобы добавить роль, перейдите в Панель управления-> Включить или отключить функцию Windows-> установите флажок "Служба печати и документов"-> установить.
Обратитесь к администратору сети для установки этого правила, если вы не можете добавить его.
После добавления роли вы можете создать объект сервера печати и получить все очереди печати на соответствующем сервере.