.NETでの奇妙なエラー印刷のPrintDocumentオブジェクト
-
11-09-2019 - |
質問
私は印刷のため、独自のPrintDocumentオブジェクトを生成のWinFormsアプリケーションがあります。それは私自身のテストでXPとWindows 7で正常に動作しますが、彼らが開いているドキュメントを印刷コマンドを選択すると、1人のユーザーが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)
私は、このエラーの性質と、これを複製する任意の潜在的な方法を縫い合わせ苦労しています。実行上のマニフェストは、「限定された」許可モードであるとも、管理者がエラーを発生ように、ユーザがアプリケーションを実行有する。
解決
ユーザーが選択したデフォルトのプリンタを持っていることを確認してください。私は最終的にデフォルトプリンタなしで引き起こされた不安定なプリンタ関連のバグの多くに遭遇しました。
他のヒント
私は難読化ツールを使用した後、このエラーを持っています。 (ただし、印刷に関するすべてのコードを難読化しませんでした。)
いくつかの逆コンパイル.NETコードなどを掘り後、私は解決策を見つけました
ただのプリントダイアログなどを表示する前に、現在のコンピュータのプリンタ設定を読み取りダミーのコードを追加します。
ここで私がお勧めでしょうコードがあります:
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()
問題は、プリンタドライバが故障したことがあることが判明しました。私は再インストールした後、それがうまく働いています。
所属していません StackOverflow