4

一言で言えば、アプリはデータベースから何かを行うための命令を検索し、アクションを実行し、そのアクションの成功または失敗に関する情報をデータベースに保存します。Officeアプリケーションの自動化、ファイルのコピー、検索の実行など、約40の異なるアクションを実行します。

アプリケーションは単一のEXEであるため、すべてがメインアプリのプロセススペースで実行されます。これは、作業を行うために多くのサードパーティのDLLをロードする必要があり、多くの場合、不快なことを実行してクラッシュするため、不安定性の主な原因となっています。アプリ全体。

計画:危険な重労働を行うコードをVB6 exeから、メインアプリとは独立して実行される外部プロセスに移動したいと思います。元のアプリはデータベースのものだけを処理し、入札を行うために他のプロセスを開始します。

これを行うための最良の方法は何ですか?まだVB6を使用している場合は、これを行うためにActiveX EXEを作成すると思いますが、.Netに相当するものが何であるかはわかりません。理想的には、VB6アプリは、外部プロセスをインスタンス化するオブジェクトを宣言し、オブジェクトセットパラメーターのメソッドを使用してプロセスを実行し、場合によっては進行状況の通知を受け取り、最後に操作の結果を受け取ります。

これを行うための最良の方法は何ですか?

ありがとう!!

4

2 に答える 2

0

うーん、私が以前にこのようなことを試したことがあるとは言えませんが、

1つの可能な解決策

  1. a)子プロセスを生成し、b)プロセス間の通信を容易にするWCFサービスをホストするアプリケーション\サービスを作成します
  2. 「アクション」を処理するための子プロセスを記述します

別の可能な解決策

別の方法として、Windows Workflow Foundation 4を使用することもできます。これは比較的安定していて、比較的使いやすいです(これに手を出してみました)。それがあなたが必要とする分離を提供するかどうかはわかりませんが、一見の価値があります。

基本的に、独自のカスタムアクティビティを作成してアクションを実行し、WorkflowInvokerを介して動的に実行します。

さらに別の可能な解決策

やや手間がかかるかもしれませんが、シングルプロセスホスティングの点ではやや慣習的であり、必要な分離を提供するさらに別の代替手段は、Managed Add-in Framework [MAF]を調べることです(分離レベルに関するリンクのセクションを確認してください) )。それは少し恐ろしいかもしれませんが、私の友人のケント・ブオゴールはそれを使っていくつかの気の利いたことをしました、そしてあなたが物事を単純に保つならば、それはただトリックを変えるかもしれません。

于 2010-07-16T13:51:58.310 に答える
-1

あなたの場合、(コンソールアプリケーションなどを介して)別のプロセスを生成することはおそらく良い考えではありません。あなたは本当に面倒かもしれないそのプロセスと通信することを心配しなければなりません、そしてそれはあなたにどんな安定性も実際に買うつもりはありません。私がおそらく行うことは、VB.NETを使用して、BackgroundWorkerスレッドを使用するCOM-Visibleクラスライブラリを作成することです。

これにより、.NETライブラリ内でバックグラウンドで作業できるようになり、例外管理(.NETライブラリ内)に注意している限り、VB6アプリケーションに実際に影響を与えることはありません。VB6アプリケーションは、.NETライブラリが手間のかかる作業を実行し、わかりやすいメッセージを送信するのを待つことができます。

于 2010-07-16T13:44:57.220 に答える