1

印刷用に独自の 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)

このエラーの性質と、これを複製する可能性のある方法を突き止めるのに苦労しています。実行可能ファイルのマニフェストは「制限付き」アクセス許可モードになっており、ユーザーが管理者としてアプリケーションを実行してもエラーが発生します。

4

3 に答える 3

6

ユーザーが既定のプリンターを選択していることを確認します。最終的にデフォルトのプリンターがないことが原因である、多くの不安定なプリンター関連のバグに遭遇しました。

于 2009-07-07T16:35:33.553 に答える
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()

問題は、プリンタードライバーが故障していたことであることが判明しました。再インストールしたらうまくいきました。

于 2010-10-10T19:17:50.643 に答える
2

難読化ツールを使用した後、このエラーが発生しました。(ただし、印刷に関するコードは難読化されていません。)

逆コンパイルされた.NETコードなどを掘り下げた後、解決策を見つけました:

printdialog などを表示する前に、現在のコンピューターのプリンター設定を読み取るダミー コードを追加するだけです。

私がお勧めするコードは次のとおりです。

Console.Write(PrintSettings.InstalledPrinters);

これは .NET または Windows のバグだと思います。

于 2010-03-17T09:48:09.267 に答える