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