2015-02-23 105 views
1

情景:的WinForms桌面应用程序,NET 2.0福昕PDF SDK - AccessViolationException在PrintWithDialog

我们有我们的用户群的0.01%谁是无法打印,我们通过福昕PDF SDK的ActiveX呈现文档的问题v5.0.1

当用户单击“打印”按钮时,我们在查看器控件实例上调用PrintWithDialog()方法。此时,将引发访问冲突异常,然后应用程序挂起。打印对话框不显示。没有进一步的用户输入(鼠标,键盘)使其恢复生命,并且该进程必须通过任务管理器来终止。

的异常堆栈跟踪是:

AccessViolationException - Attempted to read or write protected memory. This is 
often an indication that other memory is corrupt. 

    at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) 
    at FoxitPDFSDKStdLib._DFoxitPDFSDK.PrintWithDialog() 
    at AxFoxitPDFSDKStdLib.AxFoxitPDFSDK.PrintWithDialog() 
    at MyCode.PDFToolBarButtonClick(Object sender, EventArgs e) 

我们无法重现的问题,福昕似乎不能够做任何事情来帮助我们,因为我们不能给他们再现了一个项目问题。

我怀疑是指向Windows 7和打印设置的组策略控制。我们已经取得了一些成功,要求受影响的用户删除并重新安装默认打印机,但是问题在一两天后会重新出现。一个站点的策略设置控制谁可以用彩色打印,并以不同的方式安装打印机(同一物理设备)。

有没有人有任何Windows 7的经验或组策略设置,影响打印?

编辑:这只是FoxIt受此问题影响。其他一切 - Acrobat,Word,记事本等打印没有问题。

+0

您是否在此尝试过此修补程序? “当您运行基于.NET Framework 2.0的应用程序时,会发生System.AccessViolationException异常......”http://support.microsoft.com/kb/975954 – 2015-02-26 09:34:21

+0

@Paul Zahra。谢谢。我们会放弃它。 – 2015-02-26 14:56:58

+0

如果您进行崩溃转储,您可能会获得更多信息,但如果问题出在FoxIt的dll上,则需要由他们来阅读转储并修复它。也就是说,如果您发现某个驱动程序或其他东西有些奇怪,您可以将其追踪到特定的dll。 http://blogs.msdn.com/b/tess/archive/2008/02/04/net-debugging-demos-lab-1-hang.aspx – JMarsch 2015-02-27 20:17:13

回答

3

我可以模拟这种情况,如果我删除默认的打印机设置(意味着没有打印机设置为默认值),所以临时重命名从“设备”到“OldDevice”

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device 

我简单以下注册表键形式:

public Form1() 
{ 
    InitializeComponent(); 
    try 
    { 
     this.axFoxitPDFSDK1.OpenFile(@"C:\foxit\FoxitPDFActiveX51_Manual.pdf", ""); 

     this.axFoxitPDFSDK1.PrintWithDialog(); 
    } 
    catch (System.Exception exc) 
    { 
     Debug.WriteLine(exc.StackTrace); 
     Debug.WriteLine(exc.Message); 
     if (exc.InnerException != null) 
     { 
      Debug.WriteLine(exc.InnerException.Message); 
     } 

    } 
} 

和调试输出相关:

Eccezione first-chance di tipo 'System.AccessViolationException' in mscorlib.dll 
'MySOfoxit.vshost.exe' (Gestito (v2.0.50727)): 'C:\Windows\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata. 
    in System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) 
    in FoxitPDFSDKStdLib._DFoxitPDFSDK.PrintWithDialog() 
    in AxFoxitPDFSDKStdLib.AxFoxitPDFSDK.PrintWithDialog() 
    in MySOfoxit.Form1..ctor() in c:\foxit\MySOfoxit\Form1.cs:riga 23 
Tentativo di lettura o scrittura della memoria protetta. Spesso questa condizione indica che altre parti della memoria sono danneggiate. 

我CA n提及这个link(或许)是触发事件的可能原因之一。其他应用程序(WinWord,Adobe Reader)按预期工作(仅需要手动选择打印机)

+0

这看起来很有希望。在赏金到期之前,我会尽我所能去测试这个。谢谢。 – 2015-03-03 21:43:56

+0

我现在可以按照您的描述重现问题。我马上就会接触到我们的客户。 – 2015-03-03 22:04:01

+0

已经通过了重现FoxIt的步骤,他们现在已经生成了该组件的修订版本,而且这似乎在我们受影响的站点上运行良好。 – 2015-05-11 08:54:42