質問

C# Windows サービスが新しいバージョンを自動的にチェックしてサービス自体をアップグレードできるようにするフレームワークはありますか?確かにこれを実現するコードを書くことはできますが、すでに実装され、(最も重要なことに) テストされているフレームワークを探しています。

編集]ここに、これを達成するのに役立つ最新のプロジェクトへのリンクを含む同様の質問へのリンクがあります。 .NET のライブラリを自動更新しますか?

役に立ちましたか?

解決

型をアンロードする唯一の方法は、アプリドメインを破棄することです。これを行うには、実行中のサービス コードからホスティング層を分離する必要があります。これは非常に複雑です。(鍵穴手術のようなものです)

a) バッチ タスクを実行するか、b) サービス内で更新を検出し、サービスを停止したりアセンブリを更新したりする別のプロセスを起動する方が簡単な場合があります。その後、再起動します。

前者に興味がある場合は、MSDN のパターンとプラクティスが、サービスに適応させるアプリ アップデーター ブロックを作成しました。

https://web.archive.org/web/20080506103749/http://msdn.microsoft.com/en-us/library/ms978574.aspx

他のヒント

この特定の問題の解決を容易にするフレームワークを私は知りません。

ただし、サービスのビジネス ロジックを実際のサービス コードから異なるアセンブリに分離することもできます。サービス アセンブリにビジネス ロジック アセンブリの更新を定期的にチェックさせ、必要に応じてリモート ソースからコピーし、古い BL アセンブリをアンロード (場合によっては削除) してから、新しいバージョンを動的にロードします (古いアセンブリのアンロードは行われません)。簡単な作業です)。

もう 1 つの可能な解決策は、実行する別のサービスを用意し、更新がある場合は他のサービスを停止してから、サービスを更新することです。実行中の .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

有料フレームワークであることに注意してください (ライセンスは開発者ごとにあり、無料トライアルが含まれています)

他の誰かがこれを探している場合に備えて;このリンクは興味深いと思いました。この解決策はまだ実装していませんが、うまくいきそうな気がします

http://www.eggheadcafe.com/articles/20041204.asp

質問を少し明確にしてもらえますか?私は少し混乱しています。私が知る限り、サービスが使用するDLLをいつでも上書きできるからです。サービスのコピーと再起動は、ビルド プロセスの一部として簡単に行うことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top