Frage

Ich habe eine WinForms-Anwendung, die ihr eigenes Printdocument-Objekt für den Druck erzeugt. Es funktioniert gut in XP und Windows 7 mit meinem eigenen Test, aber ein Benutzer die folgenden Ausnahme immer in Vista wurde, wenn sie den Druckbefehl mit einem geöffneten Dokument auswählen:

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

Ich habe eine harte Zeit, die Art dieses Fehlers Ansetzen und potenziellen Möglichkeiten zu duplizieren diese. Das Manifest auf der ausführbaren Datei ist in dem „limited“ Berechtigungen Modus ist und auch der Benutzer die Anwendung ausführen als Administrator der Fehler erzeugt.

War es hilfreich?

Lösung

Stellen Sie sicher, dass der Benutzer einen Standarddrucker hat ausgewählt. Ich habe in eine Menge von erratischer druckerspezifischen Bugs führen, die letztlich von keinem Standarddrucker verursacht wurden.

Andere Tipps

Ich habe diesen Fehler bekam nach einem obfuscator verwenden. (Aber keinen Code zum Drucken verschleiern.)

Nach einigen dekompilierten .NET-Code usw. Graben Ich habe eine Lösung gefunden:

Nur ein Dummy-Code hinzufügen, um die Druckereinstellungen des aktuellen Computer liest, bevor ein Printdialog usw. angezeigt wird.

Hier ist der Code, den ich empfehlen werde:

Console.Write(PrintSettings.InstalledPrinters);

Ich denke, dies ist eine .NET oder ein Windows-Bug.

Ich hatte einen sehr ähnlichen Fehler:

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

Das Problem stellte sich heraus, dass der Druckertreiber fehlerhaft war. Nachdem ich es funktionierte gut neu installiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top