Проблемы PrintDocument с 64-разрядной версией Windows Server 2008 R2 Standard

1

Похоже, что при попытке использовать пространство имен System.Drawing.Printing.PrintDocument в 64-разрядном (SP1) Windows 7 оно отлично работает. Но попробовав тот же код на 64-битном (SP1) сервере 2008 R2, он просто зависает в коде. Никакие исключения не выбрасываются и т.д....

Вот фрагмент моего кода...

private bool PrintTIF(string sPrinter, string sFile)
{
    try
    {
        //Open file for printing
        WriteEvent(105, "Opening the file for printing using streamreader...", CustomLogTool.EventLogEntryTypeExtentions.Debug);
        m_PrinterFile = new StreamReader(sFile);

        //Set the document name
        WriteEvent(105, "Set the document name.", CustomLogTool.EventLogEntryTypeExtentions.Debug);
        m_Printer.DocumentName = Path.GetFileName(sFile);

        //Print file
        WriteEvent(105, "Sending the file to the printer...", CustomLogTool.EventLogEntryTypeExtentions.Debug);
        m_Printer.Print();
        m_PrinterFilesPrinting.Add(new PrintInfo(sFile, null, sPrinter));

        //Close file
        WriteEvent(105, "Closing the file and destorying the streamreader object.", CustomLogTool.EventLogEntryTypeExtentions.Debug);
        m_PrinterFile.Close();

        //Success
        return true;
    }
    catch (Exception ex)
    {
        try { m_PrinterFile.Close(); }
        catch { }
        WriteEvent(201, ex.Message, CustomLogTool.EventLogEntryTypeExtentions.Debug);

        return false;
    }
}

Я регистрирую события журнала до "Отправка файла на принтер...". Я ничего не получаю, я ожидаю получить сообщение об ошибке 201 в исключении. Но я ничего не получаю. Это как если бы программа зависла. Я предполагаю, что это произошло из-за того, что было изменено с Win7 (SP1) на Server2008R2 (SP1). Есть идеи?

  • 1
    Никогда, никогда , никогда не пытайтесь печатать из службы. Вы не можете видеть предупреждения драйвера принтера.
  • 0
    Весь смысл моего приложения в том, чтобы печатать из службы ... Почему я не могу просто включить эти "предупреждения драйвера принтера" в запись журнала событий? Не могли бы вы подробнее рассказать о «предупреждениях драйвера принтера»? Что они, как я могу их увидеть или получить к ним доступ и т. Д ... Что-нибудь ...
Теги:
windows-server-2008-r2

1 ответ

0
Лучший ответ

Решение: Я понял, в чем моя проблема. Это связано с тем, что я все время выбрал неправильный принтер! Много времени потрачено на такую простую вещь, но это привело меня к тому, чтобы подходить к отладке по-другому. После того, как я начал использовать правильный принтер, я узнал, что мой следующий выпуск - это файл TIFF, который не является фактическим файлом TIFF. Это тестовый файл с 0 байтами, который я забыл в тестовом каталоге.

Мой новый подход к отладке этих проблем с обслуживанием принтера: лучший способ узнать, что происходит, - это немного выйти из "Сервисного царства". Скомпилируйте его как сборку Debug и таким образом вы можете запустить его в качестве консольного приложения. Создав его как сборку Release, вы должны запустить его как службу и НЕ разрешите запускать его вручную. Когда я построил его как выпуск Debug, я запустил его на сервере из каталога, а затем появилось диалоговое окно Windows... Он спрашивал меня, что я хотел сохранить как файл. Вскоре после того, как я понял, что это был принтер Microsoft XPS Document Writer по умолчанию!

Затем я вошел и сменил принтер на тот, который мне нужен (через код)...

PrintDocument pd = new PrintDocument();
pc = new StandardPrintController();
pd.PrintController = pc;
// Yadda Yadda Yadda...
pd.PrinterSettings.PrinterName = "My Printer Name";

Надеюсь, что это поможет кому-то еще и сэкономит их некоторое время! Удачи!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню