Странная ошибка при печати объекта PrintDocument в .NET

StackOverflow https://stackoverflow.com/questions/1093378

  •  11-09-2019
  •  | 
  •  

Вопрос

У меня есть приложение Winforms, которое генерирует собственный объект PrintDocument для печати.По моим собственным тестам, он отлично работает в 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)

Мне трудно понять природу этой ошибки и любые потенциальные способы ее дублирования.Манифест исполняемого файла находится в режиме «ограниченных» разрешений, и даже если пользователь запускает приложение от имени администратора, возникает ошибка.

Это было полезно?

Решение

Убедитесь, что у пользователя выбран принтер по умолчанию.Я столкнулся с множеством хаотичных ошибок, связанных с принтером, которые в конечном итоге были вызваны отсутствием принтера по умолчанию.

Другие советы

У меня возникла эта ошибка после использования обфускатора.(но не запутывал код печати.)

После раскопок декомпилированного кода .NET и т. д.Я нашел решение:

Просто добавьте фиктивный код, который считывает настройки принтера текущего компьютера перед отображением какого-либо диалогового окна печати и т. д.

Вот код, который я рекомендую:

Console.Write(PrintSettings.InstalledPrinters);

Я думаю, что это ошибка .NET или Windows.

У меня была очень похожая ошибка:

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

Проблема оказалась в том, что драйвер печати был неисправен.После того, как я переустановил, все заработало нормально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top