Was ist der einfachste Weg, um einen .NET Windows-Dienst in der Produktion zu aktualisieren?

8

Angenommen, Sie haben einen benutzerdefinierten Windows-Dienst auf einem Server installiert. Der Dienst wird mit .NET geschrieben und mit InstallUtil, einem MSI-Paket oder der ManagedInstallerClass installiert (wenn es einen Unterschied macht, wählen Sie den, der das Problem löst). In regelmäßigen Abständen müssen Sie Änderungen am Dienst bereitstellen, und natürlich möchten Sie dies so einfach wie möglich gestalten.

Ist es "sicher", den Dienst einfach zu beenden, die .exe-Datei zu ersetzen und den Dienst neu zu starten? Oder müssten Sie die neue .exe-Datei deinstallieren und neu installieren? Wäre es einfacher, wenn der "sich entwickelnde" Teil des Dienstes in eine separate Versammlung aufgeteilt würde? Gibt es Tools oder APIs, die bei der Entwicklung oder Bereitstellung des Dienstes hilfreich sein können?

    
Jørn Schou-Rode 20.01.2010, 22:20
quelle

3 Antworten

2

Für die Aktualisierung von Diensten verwenden wir entweder MSI-Pakete (falls wir unseren Kunden ohnehin ein Installationsprogramm zur Verfügung stellen) oder ein kurzes Skript, das die alte Version des Dienstes stoppt und deinstalliert und dann die neue Version kopiert, installiert und startet.

Für das Scripting der Bereitstellung lokaler Dienste können Sie Standard-Windows-Befehle wie net start und net stop in Kombination mit installutil verwenden. Für die Remote-Bereitstellung können Sie z. Verwenden Sie psexecute und psservice von SysInternals.

    
Dirk Vollmar 20.01.2010, 22:52
quelle
12

Ich stoppe einfach den Dienst und ersetze die exe; es ist sicher, das zu tun.

Sie können es so einrichten, dass Ihr Dienst beginnt, Module zu laden, und Sie entwickeln Ihr System auf diese Weise; es würde funktionieren, aber es kann übermäßig kompliziert sein, oder nicht, abhängig davon, was genau Sie tun möchten.

    
Noon Silk 20.01.2010 22:21
quelle
5

Stoppen Sie einfach den Dienst, ersetzen Sie die EXE und starten Sie sie neu. Dies sollte wahrscheinlich Teil Ihres Installers sein. Trennen Sie es in separate Baugruppen nur aus Gründen der Neuinstallation ist ein Kaninchenloch.

    
David Lively 20.01.2010 22:28
quelle