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

************** 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)

我有一个很难拼凑出这个错误,复制本的任何潜在方式的性质。上的可执行的清单是在“有限”的权限模式并且甚至具有用户运行该应用程序作为管理员生成错误。

有帮助吗?

解决方案

确认用户已经选择默认打印机。我碰到了很多不稳定的打印机相关的bug是最终由默认打印机造成的。

其他提示

我使用混淆后得到这个错误。 (但没有混淆关于打印的任何代码。)

挖一些反编译.NET代码等我发现的溶液后:

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

下面是我给你推荐的代码:

Console.Write(PrintSettings.InstalledPrinters);

我认为这是一个.NET或Windows错误。

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

    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()

在问题被证明是该打印驱动程序是错误的。我重新安装后,它工作得很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top