2011-01-17 19 views
6

構成の一部が変更されたときにアプリケーションを完全に再起動する必要があります。 IISはasp.netアプリケーションの設定を監視することをお勧めしますが、コンソールやサービスなどのアプリケーションを再起動するにはどうすればよいですか?構成の変更時に.Netアプリケーションが自動的に再起動する

FileSystemWatcherで設定ファイルの変更を監視し、アプリケーションの新しいインスタンスを開始して現在のものを閉じることはできますか?

のようなもの:.NETの標準アプリケーション設定は私の知る限りでは、動的更新を許可していません

​​

答えて

2

あなたは別々のAppDomainであなたの実際のアプリケーション・ロジックを実行することができます:ここで

は、あなたがそれについて行くことができる方法です。最初(またはデフォルト)のAppDomainは、(a)ファイルシステムウォッチャーでスレッドを開始し、(b)別のAppDomainでアプリケーションロジックを開始するためにのみ使用されます。キーは、AppDomainの作成時に設定ファイルにパスを渡すことができるということです。

コンフィギュレーションファイルの変更を特定したら、アプリケーションロジックを停止します(これはあなたのケースに含まれていることですが、これは本当に難しい部分です)。AppDomainをアンロードしてから再起動します。構成ファイル。

1

を。しかし、私があなたの場合は、xmlやその他の設定を読み込み、設定ファイルの変更を監視し、何か変更があった場合、自分のクラスが設定ファイルを動的に再読み込みする、独自のアプリケーション設定クラスを作成します。これが可能であれば、新しいプロセスを強制終了して開始するよりもはるかにエレガントでなければなりません。

アプリケーションを複数回呼び出す(新しいプロセスを開始するときに2つのインスタンスがあります)、停止することに問題がない場合や、構成の変更があまり頻繁でない場合は、アプローチに欠点はありません。あなたが良い意志でWindowsサービスを開始できるかどうかわかりません。

+0

Mattenに感謝します。しかし、私自身の設定ファイルは、アプリケーションを終了したいときに役立ちません(設定データを更新するだけでなく、すべてのリソースを解放します) –

1

Asp.netについてはわかりませんが、別のAppDomainでアプリケーションを読み込み、設定が変更されたときにドメインをリロードすることができます。これは基本的に新しい設定であなたのアプリを再初期化します。

  AppDomainSetup setup = new AppDomainSetup() 
      { 
       ApplicationBase = AppDomain.CurrentDomain.BaseDirectory, 
       // ... maybe more options can go here, inspect the class and see your options 
      }; 

      domain = AppDomain.CreateDomain("MyDomainName", null, setup); 
      domain.UnhandledException += new UnhandledExceptionEventHandler(domain_UnhandledException); 
      MyApplication app = (MyApplication)domain.CreateInstanceFromAndUnwrap("assemblyfilename.dll", "The_Type_Name.MyApplication"); 
      app.Launch(); 
1

デバッガは、Visual StudioがXXX.exeではなくXXX.vshost.exeを起動することを覚えているので、デバッグ時に別のファイルを見る必要があります。

FileSystemWatchは簡単なビットです。メインアプリケーションを実行するために2番目のアプリケーションドメインを使用するか、「ランチャー」アプリケーションを使用する必要があります。必要に応じてProcess.Start()再起動。エラーチェックはこれを難しいものにしています...

関連する問題