私はWindowsサービスを構築しましたが、今は自動更新します。私はそれを行うための第二のサービスを作成するか、または別のプログラムを読むことを読んだことがありますか?クリックしてください、myBuildについては何ですか?誰もそれを知っていますか?最善の方法は何ですか?アセンブリを変更できますか?Windowsサービスをサイレントに更新する
5
A
答えて
5
あなたがアップデートを実行している間、あなたのサービスを実行したい場合は、ここではこれを達成するために前に私が行っていたものです:
- 別のDLLにあなたのupdatebleロジックを入れてください。
- サービス内にAppDomainを作成します。
- あなたがそのDLLからのものを実行するスレッド
- ロード(キュー)をブロックしながらファイル(あなたがMSFT耳鼻咽喉科Libのアップデートを使用することができます)
- が古いDLLをアンロードすることをコピーしたときにイベントが発生したファイルモニタを作成します。新しいDLLファイルをアプリケーションドメインに追加します。
- 処理を続行するようスレッドに知らせます。
3
- 新しいexeと追加のアセンブリをダウンロードします。
- 既存のアセンブリの名前を変更します。
- 新しいアセンブリをコピーします。
- 再起動サービス。サービスの再起動機能をメインサービスのexeファイルに組み込むことができます。
- サービスが開始されると、手順2で名前を変更したファイルをチェックし、それらを削除してクリーンアップします。
private const string _mutexId = "MyUniqueId";
private static Mutex _mutex;
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
try
{
bool alreadyRunning = false;
try
{
Mutex.OpenExisting(_mutexId);
alreadyRunning = true;
}
catch (WaitHandleCannotBeOpenedException)
{
alreadyRunning = false;
}
catch
{
alreadyRunning = true;
}
if (alreadyRunning)
{
using (ServiceController sc = new ServiceController("MyServiceName"))
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 120));
sc.Start();
}
return;
}
}
catch
{
}
_mutex = new Mutex(true, _mutexId);
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
// Load the service into memory.
ServiceBase.Run(ServicesToRun);
_mutex.Close();
}
1
を行うそれは単にあなたのメインアプリケーションのためのランナーである、と持つように
System.Diagnostics.Process.Start
(System.Reflection.Assembly.GetEntryAssembly().Location)
は、その後、あなたのサービスであなたのWindowsサービスを変更することができないあなたのサービスを再起動するにはメインアプリケーションを更新する機能
だから、あなたが持っているでしょう:
SERVICE.EXEは:Application.exeを実行し、Application.exeへの更新のための遠隔地を監視します。 Start/StopイベントをApplication.exeに送信します。
Application.exe:以前はService.exeでした。開始/停止イベントを受信します。
関連する問題
- 1. Windows XPまたはWindows 7のテーマを変更(サイレント)
- 2. AdalJs - サイレント更新トークンを無効にする方法
- 3. アンインストールせずにC#Windowsサービスを更新する
- 4. Windowsダイアログでサービスのステータスを更新するには
- 5. プロンプト=なしでサイレント更新を許可する設定
- 6. Squidプロキシ - Windowsサイレント/自動インストール
- 7. WindowsサービスからASP.Netメンバーシップを更新する
- 8. React(create-reaction-app)にサイレント更新エントリポイントを追加
- 9. TopShelf Windowsサービスのメモリリーク時にSQLからの情報を更新
- 10. Google Playサービスの更新を自動的に更新する
- 11. サービスを更新するには?
- 12. SQLコンパクト・サービス・パックのサイレント・インストール・パラメータ
- 13. Mac用Cocoaを使用したサイレント自動更新
- 14. Google Playサービスに更新する11.2.0
- 15. Windowsサービス(Windows 7)からディスプレイ解像度を変更する
- 16. oidc-client-jsのサイレント更新が機能しない
- 17. WindowsサーバーにWindowsサービスをインストールする
- 18. WindowsサービスにWindowsメッセージを送信する
- 19. 簡単な自動更新クライアント(Windowsサービス)の作成方法は?
- 20. Webサービス - キャッシュ更新
- 21. Silverlight WCFクライアント、Sharepoint Webサービスはサイレントになります
- 22. CakePHP Webサービスをバイナリイメージデータで更新する
- 23. 単一サービスを更新する
- 24. サービスからアンドロイドを更新する
- 25. メモリモデルをサービスから更新する
- 26. Windows上でHaskellパッケージを更新する
- 27. DockerfileでWindowsソフトウェアを更新する
- 28. Windows上でOpenGLライブラリを更新する
- 29. 実行時にWindowsフォームでASMXサービスのアドレスを変更する
- 30. ISAプロキシによる自動Windows更新
...申し訳ありませんが、ひどくうまく説明されていません。午前3時にSOの回答を書くことはおそらく最良の考えではありません;) –