1

シナリオ: WinForms デスクトップ アプリ、.Net 2.0

FoxIt PDF SDK ActiveX v5.0.1 を介して提示しているドキュメントを印刷できないユーザー ベースの 0.01% に問題があります。

ユーザーが「印刷」ボタンをクリックすると、ビューア コントロール インスタンスで 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 と印刷設定のグループ ポリシー制御に向けられています。影響を受けるユーザーにデフォルトのプリンターを削除して再インストールするように依頼することにはある程度成功しましたが、1、2 日後に問題が再発しました。あるサイトには、カラーで印刷できるユーザーを制御するポリシー設定があり、プリンター (同じ物理デバイス) を別の方法でインストールします。

印刷に影響を与える Windows 7 またはグループ ポリシー設定を使用した経験のある人はいますか?

編集: この問題の影響を受けるのは FoxIt だけです。他のすべて - Acrobat、Word、メモ帳などは問題なく印刷されます。

4

1 に答える 1

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);
        }

    }
}

およびデバッグからの関連する出力:

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.

このリンクは、(おそらく) トリガー イベントの考えられる原因の 1 つとして言及できます。他のアプリケーション (WinWord、Adobe Reader) は期待どおりに動作します (プリンターを手動で選択するだけで済みます)。

于 2015-03-03T21:10:09.077 に答える