2013-04-04 2 views
22

Ich habe einen Windows-Dienst mit C# in Visual Studio 2010 erstellt. Ich habe viel über die Automatisierung des Installationsprozesses recherchiert. Hab viele Tipps bekommen, aber keiner hat für mich funktioniert. Der Windows-Dienst, den ich erstellt habe, hat viele Abhängigkeiten und ich möchte, dass der Client während der Installation keine UI-Interaktion hat. Ich habe ein Setup-Projekt für dieses erstellt, das alle meine Abhängigkeiten innerhalb des Installers enthält.Was ist der beste Weg zur Automatisierung der Windows Service-Bereitstellung?

Prozess beteiligt: ​​

  • einen Build für Windows erstellen Service
  • Drücken Sie die Setup-Datei (.msi) an entfernten Ort
  • Rufen Sie die .msi und installieren Sie den Dienst im Hintergrund und ohne Interaktion mit dem Benutzer.

Was ich getan habe bisher:

  • ein Powershell-Skript erstellte Dateien auf Remote-Standort schieben
  • Powershell-Skript ausführen und installieren Sie den Dienst

Bitte denken Sie daran, dass Powershell Skript

sc create "servicename" binpath="somepath" 

wird verwendet, um den Dienst aus einem Projektverzeichnis zu installieren, nicht um MSI-Dateien zu installieren, die mit Setup Project erstellt wurden. Dies sind zwei sehr unterschiedliche Dinge. Wenn Sie das nicht verstehen, antworten Sie bitte nicht.

Mögliche Lösungen:

Jetzt ist meine Frage. Wie kann ich das Windows-Service-Installationsprogramm an den Remote-Standort verschieben? Und wie kann man benutzerdefinierte Build-Argumente erstellen und entweder das Msbuild-Erweiterungspaket oder den Exec-Task verwenden und den Service installieren?

Ich weiß, das klingt dumm und irritierende Frage für jemanden, der den Dienst nicht installiert hat mit (.MSI) von dem Setup-Projekt erstellt. Aber es sind meine Anforderungen, die ich seit Wochen in der Unternehmensumgebung zu lösen versuche.

+0

Haben Sie Erfolg bei der Automatisierung der Windows Service-Bereitstellung? – bhupinder

Antwort

15

Ich würde den Großteil der Arbeit aus dem Powershell-Skript tun.

  1. Verwenden Sie die msbuild Exec-Task wie oben erwähnt, um sie zu Ihrem Buildprozess hinzuzufügen. Hier ist ein ziemlich guter Artikel über using the exec task to run your powershell script.

  2. Da Sie VS 2010 verwenden, ist ein setup and deployment project ziemlich einfach. Fügen Sie Ihrer Lösung einen hinzu und fügen Sie die Ausgabe Ihres Serviceprojekts hinzu. Hier ist ein Artikel auf adding the setup project for a windows service.

  3. Verwenden Sie Ihre Powershell-Skripts, um das Installationsprogramm MSI auf den Remote-Server zu kopieren. Sie können einfach copy-item [source] [destination] verwenden, wenn Sie Zugriff auf die Dateifreigabe haben.

  4. Stoppen Sie den Dienst auf dem Remote-Computer. Sie können (get-service -ComputerName [destination] -Name [service-name]).Stop() (von this question)

  5. den Dienst installieren leise psexecpsexec \\remotecomputer "[msi-destination-path]" /qnHere's the rest of the command line options for the .msi.

  6. mit verwenden

    den Dienst starten (get-service -ComputerName [destination] -Name [service-name]).Start()

mit Ich würde auch eine Reihe von Parametern an den Powershell hinzufügen Skript für Zielserver, Servicename, etc. Es wird die Pflege dieses Teils Ihres Build-Prozesses viel einfacher machen. Ihr Erstellungsagent muss höchstwahrscheinlich auch ein Administrator auf dem Zielcomputer sein.

Schließlich, stellen Sie sicher, Ihr Powershell-Build-Skript in der Quellcodeverwaltung zu setzen!

bearbeiten (Juni 2014)
VS 2013 has installer projects again! (Sorry, VS 2012)

Auch wenn this awesome answer etwa gefunden, wie ohne Verwendung eines Setup-Projekt ein Windows-Dienst zu installieren.

+0

danke Zachary hoffe das wird installiert –

Verwandte Themen