2009-07-07 82 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() 

的問題竟然是,打印驅動程序是錯誤的。重新安裝後,它工作正常。