1

簡単なコンソール アプリケーションを使用して、infopath フォームを PDF ファイルに変換しています。これについて私がどのように行っているかを簡単に要約します。

概要: コンソール アプリケーションは、Windows フォームを作成します。フォームが (モーダルに) 読み込まれたら、infopath コントロール (Microsoft.Office.InfoPath.FormControl) をこのウィンドウに追加します。その時点で、infoPathControl.Open(myInfoPathFileStream) を呼び出します。これはすべて forloop で行われます。

問題: アプリケーションがランダムに例外 (壊滅的な障害、ヒープの破損など) をスローし、さらに良いことに、エラーをスローせずにハングすることがあります。ロギングとデバッグにより、infoPathControl.Open(myInfoPathFileStream) 呼び出しでハングしていると思われました。自動化されたプロセスの場合、これは明らかに受け入れられません。

試みた (しかし失敗した) 解決策

  • 作成した各フォームを独自の (STA) スレッドにラップし、thread.join を使用してみました。COM の問題により、これは機能しませんでした。
  • ループの各反復を独自のアプリケーション ドメインにラップしようとしました。これはある程度機能しましたが、appDomains の性質が依然として同期しているため、エラーなしでハングする問題は解決されません。さらに、奇妙なことに、COM オブジェクトによってスローされた例外を常にキャッチできるとは限らないようです。
  • 最後に、タイマーが期限切れになった場合に例外をスローするように、フォーム スレッドにタイマーを配置しようとしました。これまでのところ、これが機能するかどうかを証明することはできませんでした。

私はすでにこれにかなりの時間を費やしてきたので、どんなアイデアでも大歓迎です。

ありがとう!

4

2 に答える 2

1

最終的な解決策は、成功、失敗、および特定の種類のエラーのリターン コードを設定して、独自の実行可能ファイル内で infopath 変換プロセスを実行することでした。これは、タイムアウトのある 2 番目の実行可能ファイルによって呼び出されました。変換が一定時間内に成功しなかった場合、呼び出し元の実行可能ファイルによって強制終了されます。最終的にこれで infopath オートメーション ライブラリ内の問題が解決されるわけではありませんが、必要な作業は確実に行われます。

于 2014-12-17T19:18:52.623 に答える
1

残念ながら、あなたがやろうとしていることは、内部的に非常にコストのかかる作業になるため、おそらくそれを行うためのツールを購入する方が適しているでしょう. これは、探していることを実行する広く受け入れられているツールへのリンクです。

http://social.technet.microsoft.com/Forums/da-DK/sharepoint2010customization/thread/528c3459-074f-43f7-a7a1-d4a169b27c93

これが役に立つかどうか教えてください - ソフトウェア エンジニアとして、これがあなたの内のすべてに反することを知っていますが、あなたはこれで非常に大きくて強い壁に直面しています.

于 2012-03-01T01:59:15.923 に答える