FoxIt PDF SDK — AccessViolationException в PrintWithDialog

Сценарий: настольное приложение 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, Notepad и т. д. печатает без проблем.


person Neil Moss    schedule 23.02.2015    source источник
comment
Вы пробовали исправить здесь? При запуске приложения на основе .NET Framework 2.0 возникает исключение System.AccessViolationException... support.microsoft .com/kb/975954   -  person Paul Zahra    schedule 26.02.2015
comment
@ Пол Захра. Спасибо. Мы попробуем.   -  person Neil Moss    schedule 26.02.2015
comment
Если вы возьмете аварийный дамп, вы сможете получить больше информации, но если проблема в dll FoxIt, они должны будут прочитать дамп и исправить его. Тем не менее, если вы заметите что-то странное в драйвере или что-то в этом роде, вы сможете отследить его до конкретной dll. блоги. msdn.com/b/tess/archive/2008/02/04/   -  person JMarsch    schedule 27.02.2015
comment
Вы пытались явно поймать исключение, чтобы увидеть, в чем может быть проблема? см. это. пахнет разрешениями на доступ/использование com-объекта   -  person ZagNut    schedule 03.03.2015


Ответы (1)


Я могу смоделировать эту ситуацию, если удалю настройку принтера по умолчанию (что означает, что принтер не установлен по умолчанию), поэтому временно переименуйте следующий раздел реестра окна с «Устройство» на «Старое устройство».

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.

Я могу упомянуть эту ссылку как (возможно) одну из возможных причин инициирующего события. Другие приложения (WinWord, Adobe Reader) работают как положено (нужен только ручной выбор принтера)

person Community    schedule 03.03.2015
comment
Это выглядит чрезвычайно многообещающе. Я сделаю все возможное, чтобы проверить это до истечения срока действия награды. Спасибо. - person Neil Moss; 04.03.2015
comment
Теперь я могу воспроизвести проблему, как вы описываете. Я сразу же перейду к нашим клиентам. - person Neil Moss; 04.03.2015
comment
Передав шаги по воспроизведению в FoxIt, они теперь выпустили исправленную версию компонента, и, похоже, она хорошо работает на наших затронутых сайтах. - person Neil Moss; 11.05.2015