场景:WinForms桌面应用,.Net 2.0
我们遇到了0.01%的用户群无法打印我们通过FoxIt 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)
我们无法重现这个问题,FoxIt似乎无法做任何事情来帮助我们,因为我们无法为他们提供一个可以重现问题的项目。
我的怀疑是指向Windows 7和打印设置的组策略控制。我们已经取得了一些成功,要求受影响的用户删除并重新安装默认打印机,但问题会在一两天后重新出现。一个站点具有控制谁可以彩色打印的策略设置,并以不同方式安装打印机(相同的物理设备)。
有没有人有使用Windows 7或组策略设置的任何影响打印的经验?
编辑:这只是受这个问题影响的FoxIt。其他一切 - Acrobat,Word,记事本等打印没有问题。答案 0 :(得分:3)
如果删除默认打印机设置(意味着没有将打印机设置为默认设置),我可以模拟这种情况,因此临时将以下窗口注册表项从“Device”重命名为“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);
}
}
}
以及debug的相关输出:
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.
我可以将此link称为(可能)触发事件的可能原因之一。其他应用程序(WinWord,Adobe Reader)按预期工作(只需手动选择打印机)