Pregunta

Tengo una aplicación Windows Forms que genera su propio objeto PrintDocument para imprimir. Funciona bien en XP y Windows 7 con mi propia prueba, pero un usuario ha estado recibiendo la siguiente excepción en Vista cuando se selecciona el comando de impresión con un documento abierto:

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

Estoy teniendo dificultades para juntar las piezas a cabo la naturaleza de este error y cualesquiera formas posibles de duplicación de esto. El manifiesto en el ejecutable está en el modo "limitado" permisos e incluso tener el usuario ejecuta la aplicación como un administrador genera el error.

¿Fue útil?

Solución

Asegúrese de que el usuario tiene una impresora predeterminada seleccionada. Me he encontrado un montón de errores relacionados con la impresora erráticos que en última instancia se debe a ninguna impresora predeterminada.

Otros consejos

Tengo este error después de usar un ofuscador. (Pero no ofuscar cualquier código sobre la impresión.)

Después de cavar un poco de código .NET descompilada etc. He encontrado una solución:

Sólo tiene que añadir un código ficticio que lee los valores de la impresora de la computadora actual, antes de mostrar cualquier PrintDialog etc.

Este es el código que voy a recomendar:

Console.Write(PrintSettings.InstalledPrinters);

Creo que este es un NET o un error de Windows.

Yo tenía un error muy similar:

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

El problema resultó ser que el controlador de impresión era defectuoso. Después de haber reinstalado funcionó bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top