В нашем коде мы должны предоставить пользователям список принтеров на выбор. Затем пользователь выбирает принтер, и он проверяется, чтобы убедиться, что он действителен перед печатью. На сервере Windows 2003 с IIS 6 это работает отлично. На сервере Windows 2008 с IIS 7 он терпит неудачу при каждом выдаче заимствования, установленном в значение true.PrinterSettings.IsValid всегда возвращает false
PrinterSettings printerSetting = new PrinterSettings();
printerSetting.PrinterName = ddlPrinterName.SelectedItem.Text;
if (!printerSetting.IsValid)
{
lblMsg.Text = "Server Printer is not valid.";
}
else
{
lblMsg.Text = "Success";
}
Каждый раз, когда этот код запускается, «Сервер печати не действителен» отображается, только если Impersonate устанавливается истина. Если для олицетворения установлено значение false, отображается сообщение об успешном завершении.
Пользователь олицетворяет полное право на принтер.
Есть ли способ поймать фактическую причину, по которой принтер недействителен? Есть ли еще одна настройка 2008 года, которую я должен проверить?
update Я обнаружил, что IsValid терпит неудачу, когда пулы приложений IIS7 имеют «Включить 32-разрядные приложения». Это нужно проверить b/c, мы используем сторонний инструмент для печати, и это 32-битное приложение. В настоящее время он не является частью этого теста, поэтому прямо сейчас он не вызывает эту ошибку.
вместо lblMsg.Text = "Серверный принтер недействителен"; Я добавил System.Drawing.Printing.InvalidPrinterException jorInvalidEx = новое InvalidPrinterException (printerSetting); lblMsg.Text = jorInvalidEx.Message; На дисплее отобразилось сообщение «Настройки для доступа к принтеру» <имя принтера> 'недействительны. " – Jarrod