PrintDocument问题与Windows Server 2008 R2标准64位

时间:2014-07-21 19:18:36

标签: c# windows-server-2008-r2

似乎在尝试在Windows 7 64位(SP1)框上使用 System.Drawing.Printing.PrintDocument 命名空间时,它的效果很好。但是在Server 2008 R2 64位(SP1)框上尝试相同的代码,它只是挂在代码中。没有例外,等等...

以下是我的代码片段......

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 :(得分:0)

<强>解决方案: 我弄清楚我的问题是什么。这与我一直选择了错误的打印机的事实有关!这么简单的事情浪费了很多时间,但确实让我走上了一条以不同方式调试它的道路。在我开始使用正确的打印机后,我发现我的下一个问题是一个TIFF文件,它不是一个真正的TIFF文件。它碰巧是一个0字节的测试文件,我在测试目录中忘记了它。

我调试这些服务打印机问​​题的新方法: 找出正在发生的事情的最好方法是从“服务领域”出来一点。将其编译为 Debug 构建,这样您就可以将其作为控制台应用程序运行。将其构建为 发布 版本需要您将其作为服务运行,并且不允许您手动运行它。当我将它作为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";

希望它可以帮助别人,并节省一些时间!祝你好运!