Vijai Anand.G Ответов: 1

Как получить статус сетевого принтера в ASP.NET с#


Привет,

Мое требование состоит в том, чтобы получить статус сетевого принтера от моего ASP.NET приложение и на основе этого мне нужно обновить данные базы данных для следующего процесса.

В моем случае для сетевого принтера он всегда возвращается пустым.Я не думаю, что иду по правильному пути. Кто-нибудь, пожалуйста, скажите мне, как правильно этого добиться.

Любая помощь будет очень признательна.

Что я уже пробовал:

Мой код выглядит так
private string GetPrintJobStatus()
        {
            ObjectQuery wmiQuery = null;
            ManagementObjectSearcher objManagementobjectSearcher = null;
            ManagementObjectCollection objManagementObjectCollection = null;

            string Name = ""; // wmi print job is combination of "printerName , job number"
            string[] namesplit = null;
            string l_printerName = "";
            string l_jobNumber = "";
            string l_jobStatus = "";
            string l_status = "";

            string l_ReturnStatus = "";
            try
            {
                wmiQuery = new ObjectQuery("Select * from Win32_PrintJob");
                objManagementobjectSearcher = new ManagementObjectSearcher(wmiQuery);
                objManagementObjectCollection = objManagementobjectSearcher.Get();
                foreach (ManagementObject printJob in objManagementObjectCollection)
                {
                    Name = Convert.ToString(printJob["Name"]);
                    namesplit = Name.Split(',');
                    l_printerName = namesplit[0];
                    l_jobNumber = namesplit[1];
                    if (Convert.ToString(Session["printername"]) != "")
                    {
                        if (l_printerName == Convert.ToString(Session["printername"]))
                        {
                            l_status = Convert.ToString(printJob["Status"]);

                            if (l_status.ToUpper().Equals("OK"))
                            {
                                l_jobStatus = Convert.ToString(printJob["JobStatus"]);

                                switch (l_jobStatus)
                                {
                                    case PrintJobStatus.Blocked:
                                        l_ReturnStatus = "Printer Job is Blocked";
                                        break;

                                    case PrintJobStatus.Completed:
                                        l_ReturnStatus = "Printing is Completed";
                                        break;

                                    case PrintJobStatus.Deleted:
                                        l_ReturnStatus = "Printer Job is Deleted";
                                        break;

                                    case PrintJobStatus.Deleting:
                                        l_ReturnStatus = "Printer Job is Deleting";
                                        break;

                                    case PrintJobStatus.Error:
                                        l_ReturnStatus = "Printer is on Error";
                                        break;

                                    case PrintJobStatus.Offline:
                                        l_ReturnStatus = "Printer is on Offline";
                                        break;

                                    case PrintJobStatus.PaperOut:
                                        l_ReturnStatus = "Printer is on PaperOut";
                                        break;

                                    case PrintJobStatus.Paused:
                                        l_ReturnStatus = "Printer Job is Paused";
                                        break;

                                    case PrintJobStatus.Printed:
                                        l_ReturnStatus = "Printing is Completed";
                                        break;

                                    case PrintJobStatus.Printing:
                                        l_ReturnStatus = "Printing is Completed";
                                        break;

                                    case PrintJobStatus.Spooling:
                                        l_ReturnStatus = "Printing is Completed";
                                        break;

                                    case PrintJobStatus.UserIntervention:
                                        l_ReturnStatus = "Printing is on User Intervention";
                                        break;
                                }
                            }
                            else
                            {
                                l_ReturnStatus = "Can't Print.Error in Printer,Contact your Network Administrator.";
                            }
                        }
                       
                    }
                    else
                    {
                        l_ReturnStatus = "No Default Printer is Selected.";
                    }
                   
                }

                return l_ReturnStatus;

            }
            catch (Exception)
            {
                throw;
            }
        }

Afzaal Ahmad Zeeshan

Почему бы вам не использовать сервер печати, а затем позволить ему справиться с этим за вас? Затем вы можете пинговать сервер, чтобы узнать его состояние.

Vijai Anand.G

С TQ класс Принтсервер..в системе.пространство имен полиграфическая деятельность, не поддержка для использования в рамках сервиса Windows или приложений ASP.NET .

F-ES Sitecore

Учетная запись, под которой ваш код работает по умолчанию, очень ограничена и не имеет доступа к сети, поэтому вам будет трудно делать такие вещи. Вам нужно будет запустить свой код под учетной записью, которая имеет желаемый доступ, который вам нужен, google для того, чтобы изменить учетную запись, под которой работает ваш код, это зависит от версии IIS, которую вы используете.

Vijai Anand.G

Тк...вы говорите о подражании.Смотрите, я могу печатать из своего приложения на сетевой принтер с помощью олицетворения. но моя проблема в том, что я не могу получить статус с сетевого принтера, и только на основе этого статуса мне нужно отметить статус печати в моей базе данных. Как я могу продолжать?

1 Ответов

Рейтинг:
0

preety sunita

Привет,

пожалуйста, посмотрите на эту ссылку ниже, я думаю, что кто-то уже спрашивал об этом.

Как получить статус принтера?[^]


Vijai Anand.G

Tq..я использую класс управления в .Net Framework, который является общей информационной моделью (CIM), где я могу легко запросить значения свойств принтера WIN32 с помощью c#.но моя проблема заключается в том, что захват состояния принтера, такого как выключение питания,выход бумаги, замятие бумаги, автономный режим и т. д., С помощью c#.. он возвращает неправильный результат..

preety sunita

Посмотрите на эти ссылки..

http://www.dreamincode.net/forums/topic/63969-how-to-get-extended-printer-status/
http://stackoverflow.com/questions/5001920/c-sharp-check-printer-status
http://stackoverflow.com/questions/296182/how-to-get-printer-info-in-net

Я думаю, может быть, это полезно, чтобы получить решения...