1

私は、Microsoft Office Document Imaging オブジェクト モデルを使用して .mdi ファイルを PDF に変換する実用的なソリューションがあると考えていました。解決策は Windows サービスにありますが、現在、情報を追跡するのに苦労しているいくつかのエラーが発生しています。

私が得る例外は次のとおりです。

サーバーが例外をスローしました。(HRESULT からの例外: 0x80010105 (RPC_E_SERVERFAULT)) System.Runtime.InteropServices.COMException (0x80010105): サーバーが例外をスローしました。(HRESULT からの例外: 0x80010105 (RPC_E_SERVERFAULT))
DocumentStore.Mdi2PDF (文字列パス、文字列 newPath) で MODI.DocumentClass.Create (文字列 FileOpen) で

次に、イベント ビューアに次のアプリケーション エラーが表示されます。

エラーが発生しているアプリケーション MyWindowsServiceName.exe、バージョン 1.0.0.0、タイム スタンプ 0x4b97f185、エラーが発生しているモジュール mso.dll、バージョン 12.0.6425.1000、タイム スタンプ 0x49d65443、例外コード 0xc0000005、エラー オフセット 0x0000bd8e、プロセス ID 0xa5c、アプリケーション開始時刻 0x01cac08cf03

変換を行っているメソッドは次のとおりです。

private int? Mdi2PDF(String path, String newPath)
{
    int? pageCount = null;
    string tmpTif = Path.GetTempFileName();

    MODI.Document mdiDoc = new MODI.Document();
    mdiDoc.Create(path);
    mdiDoc.SaveAs(tmpTif,
        MODI.MiFILE_FORMAT.miFILE_FORMAT_TIFF_LOSSLESS,
        MODI.MiCOMP_LEVEL.miCOMP_LEVEL_HIGH);
    mdiDoc.Close(false);

    pageCount = Tiff2PDF(tmpTif, newPath);
    if (File.Exists(tmpTif))
        File.Delete(tmpTif);

    return pageCount;
}

これを呼び出すサービスからすべてのスレッドを削除したため、プライマリ スレッドのみが MODI オブジェクトを初期化していましたが、それでもエラーが発生したため、スレッドに関連しているようには見えません。

何百ものドキュメントを変換するコンソール アプリも作成しましたが、例外は発生しませんでした。

では、サービス内でのみインスタンス化された MODI オブジェクトのインスタンスを作成しすぎたことが原因のようですか? 意味がわかりません。

これらのエラーに関する手がかりと、さらにデバッグする方法を知っている人はいますか?

4

2 に答える 2

2

使用後に COMObject を閉じることについて、興味深いことがあります。これはおそらく役立つかもしれません。

  1. COMException 0x80010105
  2. HRESULT からの例外: 0x80010105 (RPC_E_SERVERFAULT))

オブジェクトの破棄に関連する何かがあるようです。オブジェクトの破棄が早すぎるか、まったく破棄されません。

COM オブジェクト メソッドを呼び出している間、時々ガベージ コレクターを呼び出そうとしたことがありますか?

わからない、頭に浮かぶことはすべて吐き出している、もしかしたらそれはどこかで解決策として終わるのだろうか!=)

于 2010-03-11T18:14:36.640 に答える
1

墜落した。死んだオウムです。Office DLL (mso.dll) での AccessViolation ハードウェア例外。正確にクラッシュした理由を理解するためのオプションはほとんどありません。これはあなたのコードではありません。しかし、シングルスレッドの COM サーバーをクラッシュさせるには、スレッドを使用するのが間違いなく良い方法です。あらゆる種類の Office コードが対象となります。最初にスレッドを削除してから、Microsoft サポートに連絡してください。

于 2010-03-10T21:00:38.733 に答える