문제

인쇄용 자체 인쇄 문서 개체를 생성하는 Winforms 응용 프로그램이 있습니다. 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)

나는이 오류의 본질과 이것을 복제하는 잠재적 인 방법을 파악하는 데 어려움을 겪고 있습니다. 실행 파일의 매니페스트는 "제한된"권한 모드에 있으며 사용자가 응용 프로그램을 관리자로 실행하도록하면 오류가 발생합니다.

도움이 되었습니까?

해결책

사용자에게 기본 프린터가 선택되어 있는지 확인하십시오. 나는 기본 프린터가 없어서 궁극적으로 발생한 불규칙한 프린터 관련 버그를 많이 섭취합니다.

다른 팁

Obfuscator를 사용한 후에이 오류가 발생했습니다. (그러나 인쇄에 대한 코드를 난독 화하지 않았습니다.)

디 컴파일 된 .NET 코드 등을 파운 후 솔루션을 찾았습니다.

PrintDialog 등을 표시하기 전에 현재 컴퓨터의 프린터 설정을 읽는 더미 코드를 추가하십시오.

다음은 추천 할 코드입니다.

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