2009-07-07 80 views
1

我有一个Winforms应用程序,它生成自己的打印PrintDocument对象。它工作在XP和Windows 7与我自己的测试很好,但一个用户已经越来越在Vista下面的异常时,他们选择以开放文档的打印命令:奇怪的错误打印在.NET中的PrintDocument对象

************** Exception Text ************** 
System.ArgumentException: Handle 0 is not valid. 
    at System.Drawing.Printing.PrinterSettings.SetHdevmode(IntPtr hdevmode) 
    at System.Windows.Forms.PrintDialog.UpdatePrinterSettings(IntPtr hDevMode, IntPtr hDevNames, Int16 copies, Int32 flags, PrinterSettings settings, PageSettings pageSettings) 
    at System.Windows.Forms.PrintDialog.ShowPrintDialog(IntPtr hwndOwner, WndProc hookProcPtr, PRINTDLG data) 
    at System.Windows.Forms.PrintDialog.RunDialog(IntPtr hwndOwner) 
    at System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner) 
    at System.Windows.Forms.CommonDialog.ShowDialog() 
    at Deck_Studio.DSMain.PrintDeck(Object sender, EventArgs e) 
    at System.Windows.Forms.MenuItem.OnClick(EventArgs e) 
    at System.Windows.Forms.MenuItem.MenuItemData.Execute() 
    at System.Windows.Forms.Command.Invoke() 
    at System.Windows.Forms.Command.DispatchID(Int32 id) 
    at System.Windows.Forms.Control.WmCommand(Message& m) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ScrollableControl.WndProc(Message& m) 
    at System.Windows.Forms.ContainerControl.WndProc(Message& m) 
    at System.Windows.Forms.Form.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

我有一个很难拼凑了解此错误的性质以及任何可能的复制方法。可执行文件上的清单处于“受限制”的权限模式,甚至让用户以管理员身份运行应用程序时会生成错误。

+0

听起来像打印驱动程序不行为(第一次猜测)。用户计算机上的所有打印机都会发生这种情况吗? – 2009-07-07 16:33:35

+0

他们已经尝试过他们的Adobe stiller,XPS作家和基本打印机,并且遇到了错误。 – 2009-07-07 16:45:32

回答

6

确保用户选择了默认打印机。我遇到了许多不稳定的打印机相关的错误,这些错误最终由没有默认打印机引起。

2

使用混淆器后出现此错误。 (但没有混淆有关打印的任何代码。)

挖一些反编译.NET代码等我找到了一个解决方案后:

只需添加一个虚设码读取当前计算机的打印机设置,显示任何PrintDialog类等

这里之前,我会推荐码:

Console.Write(PrintSettings.InstalledPrinters); 

我觉得这是一个.NET或Windows错误。

2

我有一个非常类似的错误:

Error Description: Handle 0 is not valid. 

Error Stack Trace: 
    at System.Drawing.Printing.PrinterSettings.SetHdevmode(IntPtr hdevmode) 
    at System.Windows.Forms.PrintDialog.UpdatePrinterSettings(IntPtr hDevMode, IntPtr hDevNames, Int16 copies, Int32 flags, PrinterSettings settings, PageSettings pageSettings) 
    at System.Windows.Forms.PrintDialog.ShowPrintDialog(IntPtr hwndOwner, WndProc hookProcPtr, PRINTDLG data) 
    at System.Windows.Forms.PrintDialog.RunDialog(IntPtr hwndOwner) 
    at System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner) 
    at System.Windows.Forms.CommonDialog.ShowDialog() 

的问题竟然是,打印驱动程序是错误的。重新安装后,它工作正常。