2011-08-15 22 views
3

この質問を書いている間:AppDomain, handling the exceptions私はまた別の質問を考えました。AppDomain、アセンブリ.exeまたは.dllを実行していますか?

上記のようなプラグインアプリを作成する場合は、あなたは、実行ファイルまたはライブラリとしてプラグインを書くことに行きますか?

AppDomain.ExecuteAssembly(String)メソッドで実行される動的にロードされた実行可能ファイルに対して、どのくらいの制御がありますか? AppDomain.CreateInstanceAndUnwrap(String, String)を使用してオブジェクトのインスタンスを作成するのではなく、

私は現在、CreateInstanceAndUnwrapの後に呼び出されるStart/Run + Stop + Initメソッドを備えたインターフェイスを持っています。実行されたアセンブリバージョンと同じタイプのコントロールを使用しますか?後者を使用する場合、どうすればそのプラグインを動的に停止することができますか?

まったく間違った方向に考えていますか?

[編集後の質問]

Basicly我々は '1' のアプリケーション、および複数の機能を得ました。 (映像)DVD)写真/ビデオカメラから

  • 印刷写真の
  • 画像のダウンロードをバーニング

    • POS
    • ストレージサーバ、バックアップ/ configsettings /画像+動画として機能 レポジトリ
    • 複数のディスプレイ上に写真/ビデオを表示する
    • などが、これらは主要な「機能」であり、

    コンピュータは複数のタスク/プラグインを実行できます。たとえば、画像ダウンロード/表示/印刷システム全体を1台のコンピュータで処理することができます。または、複数のダウンロード/表示システムを備えた1台の集中型印刷コンピュータを使用することもできます。それを再起動する必要があり、メールがオフィスに送信されなければならない何らかの理由でプラグインがクラッシュした場合

    すべてが

    をソケットを介して通信されます。同じクラッシュが短い時間枠で複数回発生する場合は、何らかの緊急メールを送信し、そのプラグインをシャットダウンしてオペレータに通知する必要があります。

    これらの関数の中にはthirdpartyアンマネージドコードを使用するものがあり、C++ /ネイティブで書かれたものとC++/CLIで書かれたものがあり、C#で書かれたものもあればC#で書かれたものもあります。

    edit2 さらに、この追加機能をシステムに追加します。そのプラグインの新しいバージョンが利用可能になるとすぐにプラグインを自動的に更新することです。親AppDomain/threadは定期的に更新をチェックし、更新が見つかった場合はそのプラグインをアンロードし、新しいバージョンをダウンロードして再度起動する必要があります。この具体的な理由から私はAppDomainを使う必要があると思う。

  • +0

    IIRC .NET Exeファイルは、ブートストラップ(C++)を持つ.NET DLLであり、エントリポイントがどこにあるかをブートストラップに伝えるマニフェストです。「管理者権限で私を実行してください」 – Aren

    +0

    これは、この「プラグイン」が行う必要があります。もう少し私たちを啓発するためのケア? –

    +0

    あなたのリクエストに追加情報を追加しました。@ csharptest.net –

    答えて

    2

    私は確かにCreateInstanceAndUnwrap()を使って行くだろう。あなたはその方法をはるかにコントロールし、プラグインと合理的に通信できます。ExecuteAssembly()を使用すると、それを起動して戻り値(int)を読み取ることができます。

    また、CreateInstanceAndUnwrap()を使用している場合は、実行する必要がある場合は、とにかくexeを使用することを止めるものはありません。

    基本的には、解決策があります(少なくともこの方向ではありません)。

    +0

    追加情報を追加しました。現在のところ、実際には実際には解決策になるでしょう(プラグインに関してはまだ計画は立てていませんが、現在計画段階にあります)。 –

    0

    代替デザインも検討する必要があります。この情報に基づいて:私は現在、スタート/ファイル名を指定して実行+ストップ + Initメソッド

    を備えインタフェースを持っている

    ...

    コンピュータが複数のタスク/プラグインを実行することができます。たとえば、 を選択すると、1台のコンピュータで画像全体のダウンロード/表示/印刷 システムを処理できます。または、複数のダウンロード/表示システムを備えた1台の集中印刷用コンピュータを使用することもできます。

    1. アイソから1つのプラグインがクラッシュ:

      ...

      すべてはコミュニケーションがすでにソケットによって行われるソケット

    、唯一欠けている機能は、「経営者である上で通信していますその他。 Windowsサービス - クラッシュ

  • スタート/ストッププラグイン
  • 再起動プラグインが
  • 自動
  • あなたは単にいただきましすでにそこに利用することができますを更新し、電子メールでのクラッシュについて管理者に通知します。プラグインをWindowsサービスとしてデプロイする場合は、すでに1,2,3が実装されています。 AppDomains、ネイティブコードのクラッシュなどを心配する必要はありません。実装は堅牢で、テストされており、管理者がよく理解しています。あなたはmanage windows services programaticalyです。あなたがする必要があるのは、電子メールを送信し、自動更新を処理するWatchDogサービスを作成することだけです。

    +0

    しかし、これはGUIの問題点です。 WindowsサービスはGUIで構成することはできません。 –

    +0

    @ Daaan:はい、このシナリオでは、タスクをサービスにオフロードするポータルのGUIアプリケーションが必要になるでしょう。このアーキテクチャの複雑さに応じて、これはディール・ブレーカーになる可能性があります。あるいは、ウォッチドッグで通常のプロセスを使用してそれらを管理することもできます。 – Dmitry