C# Windows サービスが新しいバージョンを自動的にチェックしてそれ自体をアップグレードできるようにするために使用できるフレームワークはありますか? 確かにこれを達成するためのコードを書くことはできますが、既に実装され、(最も重要なこととして) テストされているフレームワークを探しています。
[編集] これを達成するのに役立つ最新のプロジェクトへのリンクを含む同様の質問へのリンクを次に示します: Auto-update library for .NET?
C# Windows サービスが新しいバージョンを自動的にチェックしてそれ自体をアップグレードできるようにするために使用できるフレームワークはありますか? 確かにこれを達成するためのコードを書くことはできますが、既に実装され、(最も重要なこととして) テストされているフレームワークを探しています。
[編集] これを達成するのに役立つ最新のプロジェクトへのリンクを含む同様の質問へのリンクを次に示します: Auto-update library for .NET?
型をアンロードする唯一の方法は、appdomain を破棄することです。これを行うには、実行中のサービス コードからホスティング レイヤーを分離する必要があります。これは非常に複雑です。(鍵穴の手術をするようなものです)
a)バッチタスクを実行するか、b)サービス内で更新を検出してから、サービスを停止し、アセンブリを更新するなどの別のプロセスを起動してから再起動する方が簡単な場合があります。
前者に興味がある場合は、MSDN のパターンとプラクティス フォークが作成したアプリ アップデーター ブロックをサービスに適応させます。
https://web.archive.org/web/20080506103749/http://msdn.microsoft.com/en-us/library/ms978574.aspx
この特定の問題の解決を容易にするフレームワークについては知りません。
ただし、サービスのビジネス ロジックを実際のサービス コードから別のアセンブリに分離することもできます。サービス アセンブリにビジネス ロジック アセンブリの更新を定期的にチェックさせ、必要に応じてリモート ソースからコピーし、古い BL アセンブリをアンロード (場合によっては削除) してから、新しいバージョンを動的にロードします (古いアセンブリのアンロードは不要です)。些細な仕事)。
別の可能な解決策は、別のサービスを実行し、更新がある場合は他のサービスを停止してから、サービスを更新することです。実行中の .dll は停止しないため、サービスを更新することはできません。
ビジネスロジックレイヤーを分離することは良い選択肢です。メイン サービスを書き直して、マスター サービスまたはコントロール サービスによるリフレクションの下で実行することもできます。これは、ビジネス ロジックの分離に似ており、スレッドを停止して再度開始するだけで済みます。
これを行う既知のフレームワークはありません。私はこれを自分で行いましたが、それは公開されたフレームワークではありません。
私は WyBuild を使用してアプリケーション (Windows サービスを含む) を更新してきましたが、非常に優れています。非常に使いやすく、既存のアプリケーションとの統合も非常に簡単です。これは非常に優れた自動更新フレームワークです...
http://wyday.com/wybuild/help/automatic-updates/windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows-service.php
有料のフレームワークであることに注意してください (ライセンスは開発者ごとで、無料試用版が含まれています)
他の誰かがこれを探している場合。このリンクは興味深いものでした。このソリューションを実装していませんが、うまくいくようです
質問を少し明確にしていただけますか?私が知る限り、サービスが使用する DLL はいつでも上書きできるので、少し混乱しています。サービスのコピーと再起動は、ビルド プロセスの一部として簡単に行うことができます。