PC Review


Reply
Thread Tools Rate Thread

Crash when showing print setup dialog from Windows forms

 
 
WilS
Guest
Posts: n/a
 
      14th Oct 2009
Hi,
I have a simple Windows Forms app that has printing support. The app
uses System.Drawing.Printing.PrintDocument support to launch the print
dialog, and subsequently print. On several machines, this all works fine.
But on a couple of machines, it crashes itermittantly, and on a couple more
machines, it crashes pretty consistently. The errors/exceptions I get vary
from <poof> app disapperas, to OutOfMemoryException to native access
violation (0xC0000005), and even occasionally StackOverflowException. My
thinking is that there must be a bug in .NET 3.5 SP1 in the print wrapper
stuff (System.Drawing.Printing.PrintDocument) that is effectively a wild
write which manifests itself differently at different times and on different
machines.

Here's the basic code that I'm trying to run (omittng the basic Form that
hosts my 'print' button)

public Form1()
{
InitializeComponent();
m_PageSettings = new PageSettings();
m_PrinterSettings = new PrinterSettings();
printDocument1.DefaultPageSettings = m_PageSettings;
printDocument1.PrinterSettings = m_PrinterSettings;
printDocument1.PrintPage += new
PrintPageEventHandler(m_PrintDoc_PrintPage);
}

private PageSettings m_PageSettings;
private PrinterSettings m_PrinterSettings;

private void button1_Click(object sender, EventArgs e)
{
printDialog1.Document = printDocument1;
if (printDialog1.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}


}
It crashes the first time you load it up, hit the print button, and select
(in my case) the Microsoft XPS Document Writer printer. If you're trying to
debug, it often takes out Visual Studio altogether. (Note that
m-PrintDoc_PrintPage never gets called - the crash occurs before it gets to
any of my actual printing logic.)

One other test case: I have a Windows 7 32-bit machine that I Remote
Desktop into for testing. I see the failure when I use the 'local print'
resources (so my local printers are "exported" to the Windows7 machine), but
I don't see the failure if I don't export the printers. (Both the host and
target machines have the MS XPS Document printer.) So perhaps having a
longer list of installed printers or a particular list of installed printers
contributes to the bug?

Does anybody have any suggestions about what this might be, or anything to
try to work around this? I'm very suspicious that the CopyToHdevmode call
is the one crashing, as this is the function that copies the managed printer
setup state into the native DEVMODE. Could this function have a wild write
bug?

Thanks,
Wil

Here's a callstack from one of the crashes where VS didn't get killed:

ntdll.dll!_RtlpAnalyzeHeapFailure@12() + 0x20a bytes
ntdll.dll!_RtlpCoalesceFreeBlocks@16() + 0x349a2 bytes
ntdll.dll!@RtlpFreeHeap@16() + 0x10b bytes
ntdll.dll!_RtlFreeHeap@12() + 0xe37 bytes
ntdll.dll!_RtlDebugFreeHeap@12() + 0x1f9 bytes
ntdll.dll!@RtlpFreeHeap@16() + 0x34d58 bytes
ntdll.dll!_RtlFreeHeap@12() + 0xe37 bytes
rpcrt4.dll!FreeWrapper() + 0x35 bytes
rpcrt4.dll!operator delete() + 0xe bytes
rpcrt4.dll!DCE_BINDING::`scalar deleting destructor'() + 0x2c bytes
rpcrt4.dll!LRPC_BINDING_HANDLE::~LRPC_BINDING_HANDLE() + 0x22 bytes
rpcrt4.dll!LRPC_BINDING_HANDLE::`vector deleting destructor'() + 0xf
bytes
rpcrt4.dll!LRPC_BASE_BINDING_HANDLE::FreeObject() + 0x18 bytes
rpcrt4.dll!LRPC_BIND_CCALL::~LRPC_BIND_CCALL() + 0x15 bytes
rpcrt4.dll!LRPC_CCALL::~LRPC_CCALL() + 0x2c bytes
rpcrt4.dll!LRPC_CCALL::`scalar deleting destructor'() + 0xd bytes
rpcrt4.dll!LRPC_BASE_CCALL::FreeObject() + 0x241c bytes
rpcrt4.dll!LRPC_BASE_CCALL::FreeBuffer() + 0x48 bytes
rpcrt4.dll!LRPC_CCALL::FreeBuffer() + 0x2c bytes
rpcrt4.dll!_I_RpcFreeBuffer@4() + 0x11 bytes
rpcrt4.dll!_NdrFreeBuffer@4() + 0x1f bytes
rpcrt4.dll!@NdrpClientFinally@8() + 0x4fc bytes
rpcrt4.dll!_NdrClientCall2() + 0x187 bytes
rpcrt4.dll!_NdrClientCall2() + 0x165 bytes
rpcrt4.dll!@NdrpSendReceive@4()
[Managed to Native Transition]
> System.Drawing.dll!System.Drawing.Printing.PageSettings.CopyToHdevmode(System.IntPtr
> hdevmode = 64684148) Line 396 C#

System.Drawing.dll!System.Drawing.Printing.PrinterSettings.GetHdevmode(System.Drawing.Printing.PageSettings
pageSettings) Line 1041 C#
System.Drawing.dll!System.Drawing.Printing.PrintController.OnStartPrint(System.Drawing.Printing.PrintDocument
document, System.Drawing.Printing.PrintEventArgs e) Line 166 + 0x21 bytes C#
System.Windows.Forms.dll!System.Windows.Forms.PrintControllerWithStatusDialog.OnStartPrint(System.Drawing.Printing.PrintDocument
document = {System.Drawing.Printing.PrintDocument},
System.Drawing.Printing.PrintEventArgs e =
{System.Drawing.Printing.PrintEventArgs}) Line 72 C#
System.Drawing.dll!System.Drawing.Printing.PrintController.Print(System.Drawing.Printing.PrintDocument
document = {System.Drawing.Printing.PrintDocument}) Line 76 C#
System.Drawing.dll!System.Drawing.Printing.PrintDocument.Print() Line 334
C#


 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Showing Dialog Forms =?Utf-8?B?RGVubmlz?= Microsoft VB .NET 2 27th Feb 2005 06:15 AM
windows XP setup freezes during first appearing of setup-dialog (blue-screen) Frank Windows XP Help 0 6th Sep 2004 07:05 PM
How to setup forms, queries, and/or reports to print only one specified record Robert Paisley Microsoft Access Getting Started 5 3rd Nov 2003 05:39 PM
Print Setup Dialog Issues Alex Clark Microsoft Dot NET Framework Forms 7 25th Sep 2003 09:00 AM
PrintDocument.Print - how to stop 'Printing' dialog box from showing. Hasani Microsoft C# .NET 1 1st Aug 2003 07:27 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 11:55 PM.