2009-07-07 18 views
1

印刷用に独自のPrintDocumentオブジェクトを生成するWinformsアプリケーションがあります。それは私自身のテストでXPとWindows 7で正常に動作しますが、彼らが開いているドキュメントを印刷コマンドを選択すると、1人のユーザーが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

プリントドライバが動作していないようです(最初の推測)。これは、そのユーザーのコンピュータ上のすべてのプリンタで発生しますか? –

+0

彼らは、Adobeの静止画、XPSライター、そして基本的なプリンターを試してみました。 –

+0

したがって、問題のある特定のプリンタではないようです。それは許可の問題ではありません。 O/Sの問題ではない場合(つまり、Vistaを使用して別のデスクトップで試してみる)、MusiGenesisがどのように答えたのか、デフォルトのプリンタは設定されていないのです。 –

答えて

6

は、ユーザーが選択したデフォルトのプリンタを持っていることを確認してください。私は、不具合のあるプリンタ関連のバグが多く発生しましたが、これは最終的にはデフォルトのプリンタが原因ではありませんでした。

+0

はい、そうだと思います。 –

+0

どのようにデフォルトプリンタがないように設定しますか? – colmde

+1

@colmde:プリンタ選択ダイアログで「プリンタなし」を選択できないということですか?おそらく、デフォルトのプリンタ状態に戻すためには、レジストリを手動で編集する必要があります。または、すべてのプリンタを削除することもできます。申し訳ありませんが私はあなたを助けることができません、私は現時点では(OSXのためのWindowsのボックスを実行していない今)。 – MusiGenesis

2

私は難読化ツールを使用した後、このエラーを持っています。 (ただし、印刷に関するすべてのコードを難読化しませんでした。)

を私が解決策見つけたいくつかの逆コンパイル.NETコードなどを掘った後:

ちょうど現在のコンピュータのプリンタ設定を読み取りダミーのコードを追加し、私はこれは、.NETやWindowsのバグだと思う

Console.Write(PrintSettings.InstalledPrinters); 

を:ここでは任意のプリントダイアログなど

を表示する前に、私はお勧めしますコードです。

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

問題は、プリンタドライバが故障したことがあることが判明。私が再インストールした後、正常に動作しました。