似乎在尝试在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)的东西。有什么想法吗?
答案 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";
希望它可以帮助别人,并节省一些时间!祝你好运!