Frage

Sie haben einen Rahmen, der verwendet werden kann, eine C # Windows-Dienst zu ermöglichen, für eine neuere Version automatisch zu überprüfen und selbst aktualisieren? Ich kann mit Sicherheit Code schreiben, dies zu erreichen, aber ich bin auf der Suche nach einem Framework, das bereits umgesetzt wurde, und (vor allem) getestet.

[Bearbeiten] Hier ist ein Link auf eine ähnliche Frage mit Links zu modernen Projekten, die diese Hilfe erreichen: Auto-Update-Bibliothek für .NET?

War es hilfreich?

Lösung

Die einzige Möglichkeit, Typen zu entladen ist, die Appdomain zu zerstören. Um dies zu tun, würde Trennung von Ihrer Hosting-Schicht von Ihrem Service-Ausführung Code benötigen - das ist ziemlich komplex. (Art wie Schlüsselloch-Chirurgie zu tun)

kann einfacher sein, entweder a) eine Batch-Task ausgeführt oder b) in Betrieb detect Updates dann einen separaten Prozess starten, der den Dienst beendet, Updates Baugruppen usw. dann startet es neu.

Wenn Sie in den ehemaligen interessiert sind, das MSDN-Muster und Praktiken Volk eine App Updater Block geschrieben, die Sie Ihren Dienst anpassen.

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

Andere Tipps

Ich bin keine Kenntnis von Frameworks, die Lösungen für dieses spezifische Problem zu erleichtern.

Was Sie aber versuchen könnten, ist die Geschäftslogik des Dienstes von dem tatsächlichen Service-Code in verschiedene Baugruppen zu trennen. Haben Sie den Service Montagekontrolle für Aktualisierungen der Geschäftslogik Montage in regelmäßigen Abständen, kopieren Sie sie von einer entfernten Quelle, wenn nötig, entladen die alte BL-Baugruppe (und löschen vielleicht), und laden Sie dann dynamisch die neue Version (Entladen der alte Baugruppe ist nicht triviale Aufgabe).

Eine andere mögliche Lösung einen separaten Service zu haben ist, die ausgeführt wird, stoppt die andere, wenn es ein Update ist, und aktualisiert dann den Dienst. Sie können einen Service-Update selbst haben, da die DLL, die nicht aufhören ausgeführt wird.

seperating die Business-Logik-Schicht wäre eine gute Option sein. Sie könnten auch den wichtigsten Service umschreiben unter Reflexion durch einen Master oder Kontrolldienst auszuführen. Dies ist ähnlich wie die Business-Logik seperating, und es würde erfordern nur einen Thread zu stoppen und den Start es wieder.

Ich kenne keinen bekannten Rahmen, der dies tut. Ich habe dies selbst getan, aber das ist kein öffentlicher Rahmen.

Ich habe WyBuild benutze meine Anwendungen (einschließlich Windows-Dienste) zu aktualisieren und es ist ziemlich genial. Wirklich einfach zu bedienen und einfach in bestehenden Anwendungen zu integrieren. Es ist ein ziemlich großer Automatische Aktualisierung Rahmen ...

http://wyday.com/wybuild/ Hilfe / Automatik-Updates / windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows -service.php

Beachten Sie, dass es sich um einen bezahlten Rahmen (die Lizenz pro Entwickler, eine kostenlose Testversion ist im Lieferumfang enthält)

Falls jemand anderes für diese Suche; Ich fand diesen Link interessant. Ich habe diese Lösung nicht implementiert, aber es sieht aus wie es für mich funktionieren könnte

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

Könnten Sie Ihre Frage ein wenig erläutern? Ich bin ein wenig verwirrt, denn soweit ich weiß, Sie können immer die DLLs überschreiben der Dienst verwendet. Die Kopie und Neustart des Dienstes kann leicht bauen Prozess ein Teil von Ihnen gemacht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top