Question

J'ai une application Winforms qui génère son propre objet PrintDocument pour l'impression. Il fonctionne très bien dans XP et Windows 7 avec mes propres tests, mais un utilisateur a été faire l'exception suivante dans Vista quand ils choisissent la commande d'impression avec un document ouvert:

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

Je vais avoir du mal à reconstituer la nature de cette erreur et des moyens potentiels de dupliquer ce sujet. Le manifeste sur l'exécutable est dans le mode de permissions « limité » et même avoir exécuté l'utilisateur de l'application en tant qu'administrateur génère l'erreur.

Était-ce utile?

La solution

Assurez-vous que l'utilisateur dispose d'une imprimante par défaut sélectionnée. J'ai rencontré beaucoup de bugs liés à l'imprimante erratiques qui ont finalement été causés par aucune imprimante par défaut.

Autres conseils

J'ai cette erreur après avoir utilisé un obfuscateur. (Mais n'a pas obscurcir un code sur l'impression.)

Après avoir creusé un peu décompilé code .NET etc. J'ai trouvé une solution:

Il suffit d'ajouter un code fictif qui lit les paramètres de l'imprimante de l'ordinateur en cours, avant d'afficher une PrintDialog etc.

Voici le code que je recommande:

Console.Write(PrintSettings.InstalledPrinters);

Je pense que c'est un .NET ou un bug de Windows.

J'ai eu une erreur très similaire:

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

Le problème est avéré être que le pilote d'impression était défectueux. Après avoir réinstallé il a bien fonctionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top