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-> установите флажок "Служба печати и документов"-> установить.

Обратитесь к администратору сети для установки этого правила, если вы не можете добавить его.

После добавления роли вы можете создать объект сервера печати и получить все очереди печати на соответствующем сервере.

Другие вопросы по тегам