2013-04-04 14 views
22

Stworzyłem usługę windows przy użyciu C# w Visual Studio 2010. Zrobiłem dużo badań na temat automatyzacji procesu instalacji. Mam wiele porad, ale żaden nie działa dla mnie. Utworzona przeze mnie usługa Windows ma wiele zależności i chciałbym, aby klient nie miał interakcji z interfejsem użytkownika podczas instalacji. Stworzyłem projekt instalacji, który zawiera wszystkie moje zależności w instalatorze.Jaki jest najlepszy sposób automatyzacji wdrażania usług Windows?

Proces zaangażowany:

  • Tworzenie kompilacji dla usługi windows
  • popchnąć plik instalacyjny (msi) do zdalnej lokalizacji
  • połączeń .msi i zainstalować usługę cicho bez interakcji z użytkownikiem.

co zrobiłem do tej pory:

  • Utworzono skryptu powershell do pchania plików do zdalnej lokalizacji
  • Wykonanie skryptu PowerShell, a następnie zainstalować usługę

Proszę pamiętać, że PowerShell skrypt

sc create "servicename" binpath="somepath" 

służy do instalowania usługi z katalogu projektu, a nie do instalowania pliku .msi utworzonego za pomocą programu Setup Project, są to dwie bardzo różne rzeczy. Jeśli tego nie rozumiesz, nie odpowiadaj proszę.

Możliwe rozwiązania:

Teraz moje pytanie brzmi. Jak mogę przenieść instalator usług Windows do zdalnej lokalizacji? I w jaki sposób można tworzyć niestandardowe argumenty budowania i używać pakietu rozszerzenia msbuild lub zadania Exec i instalować usługę?

Wiem, że to brzmi głupio i irytująco dla kogoś, kto nie zainstalował usługi przy użyciu (.MSI) utworzonej przez Instalatora. Ale to moje wymagania, które próbuję rozwiązać od tygodni w środowisku korporacyjnym.

+0

Czy odniosłeś sukces w automatyzacji wdrażania usługi Windows? – bhupinder

Odpowiedz

15

Zrobiłbym większość pracy ze skryptu powershell.

  1. Użyj zadania msbuild Exec, jak wspomniano, aby dodać go do procesu kompilacji. Oto niezły artykuł na temat using the exec task to run your powershell script.

  2. Od kiedy używasz VS 2010, setup and deployment project jest całkiem łatwe. Dodaj jeden do swojego rozwiązania i dodaj do niego dane wyjściowe projektu usługi. Oto artykuł na temat adding the setup project for a windows service.

  3. Skorzystaj ze skryptów Power Shell, aby skopiować plik .msi instalatora na serwer zdalny. Możesz po prostu użyć copy-item [source] [destination], jeśli masz dostęp do udziału plików.

  4. Zatrzymaj usługę na zdalnym komputerze. Można użyć (get-service -ComputerName [destination] -Name [service-name]).Stop() (od this question)

  5. Instalowanie usługi dyskretnie używając psexecpsexec \\remotecomputer "[msi-destination-path]" /qnHere's the rest of the command line options for the .msi.

  6. Uruchom usługę przy użyciu (get-service -ComputerName [destination] -Name [service-name]).Start()

Chciałbym również dodać kilka parametrów do PowerShell skrypt dla serwera docelowego, nazwy usługi itd. Ułatwi to utrzymanie tej części procesu budowania. Twój agent kompilujący najprawdopodobniej również musi być administratorem na komputerze docelowym.

Wreszcie, upewnij się, że umieściłeś swój skrypt kompilacji powershell w kontroli źródła!

Edit (czerwiec 2014 roku)
VS 2013 has installer projects again! (Niestety, VS 2012)

Ponadto, jeśli okaże this awesome answer temat sposobu instalowania usługi Windows bez korzystania z projektem instalacji.

+0

dzięki Zachary nadzieję, że to zainstaluje –

Powiązane problemy