.NET WinFormsアプリケーションの自動更新機能を作成する場合、DLLを更新し、現在実行中のアプリケーションに影響を与えないようにするにはどうすればよいですか?
アプリケーションは更新プロセス中に実行されているため、DLLにロックはありません(これらのDLLは更新中に上書きする必要があるため)。
通常、新しいファイルを別の領域にダウンロードします。次に、シャットダウンして再起動し、起動時に新しいファイルを探して使用します(見つかった場合)。ダウンロードで問題が発生した場合にユーザーが確実に機能するものに戻れるように、常に最新の既知の動作バージョンを脇に置いておきます。
ClickOnceは、これを行うMicrosoftの優れたテクノロジであり、Visual Studio2008から直接使用できます。
他の人がすでにコメントしているように、アプリケーションをシャットダウンして再起動する必要があります。
実際のコールドアップデートを行うための外部アップデートアプリケーションを含め、透過モードでそれを行うためのオープンソースコードを作成しました。 http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/ を参照してください。
コードは http://github.com/synhershko/NAppUpdate (Apache 2.0ライセンスの下でライセンスされています)にあります
Webサービスを介して更新をチェックする別の「ランチャー」アプリケーションがあります。更新がある場合は、それらをダウンロードしてから、別のアセンブリにあるアプリケーションを実行します。
他の選択肢は、ClickOnceのようなものを使用するか、他の誰かが述べたように、ファイルを別の領域にダウンロードしてアプリを再起動することです。
ただし、ClickOnceについては注意が必要です。思ったほど柔軟ではありません。また、実行するためにプログラムをより高いセキュリティレベルに上げる必要があるシステムにデプロイする場合、アプリの証明書がインストールされていないと問題が発生する可能性があります。 ClickOnceに関しては、証明書管理などについてインターネット上で直接回答を得るのは非常に難しいと感じました。複雑なアプリをお持ちの場合は、独自のアップデーターをロールバックすることをお勧めします。これは、私がやらなければならないことです。
ClickOnceを介して公開する場合、そのすべてが自動的に処理される傾向があります。独自の長所と短所がありますが、通常はすべて自分でコーディングするよりも簡単です。
Wikipedia と 15seconds の両方に、ClickOnceの使用、動作方法などに関する適切な情報があります。
他の人が述べているように、ClickOnceは独自のソリューションをローリングするほど柔軟ではありませんが、それほど複雑ではありません。最初は学習曲線が小さいですが、ほとんどすべてがVisual Studioにバンドルされており、ウィザードを使用しているため、通常、実用的なソリューションに出くわすのにそれほど時間はかかりません。
展開がより複雑になり(つまり、更新が必要な前提条件やアプリケーションコードを用意するだけでなく)、インストール後またはインストール前のタスクを多数実行する必要があるため、WiXのようにハイブリッドソリューションを提供するものがあります。 WindowsインストーラーとClickOnce。柔軟性のコストははるかに急な学習曲線です。
私がカスタムインストーラーを避けようとする唯一の理由は、それを取得しようとするとちょうどいい、さまざまな「 「もしも」シナリオ...