2009-06-16 34 views
27

Kiedy należy wybrać usługę systemu Windows i kiedy należy wybrać "Aplikację w tle" działającą w obszarze powiadomień?Usługa systemu Windows a aplikacja systemu Windows - najlepsza praktyka

Jeśli się nie mylę, moja decyzja projektowa byłaby taka, że ​​każda aplikacja, która musi zostać uruchomiona, zanim użytkownik zaloguje się na komputerze, powinna być usługą. Do wszystkiego innego użyj aplikacji w tle. Czy moja decyzja jest właściwa?

Ponadto, jeśli potrzebuję "uprawnień administratora" dla mojej aplikacji w tle, będę eskalować za pomocą manifestu. Czy istnieje jakaś inna konkretna zaleta działania jako usługa?

Odpowiedz

22

Moje ogólne zasady kciuka są następujące

  • Jeśli musi zawsze działać, jest to usługa.
  • Jeśli ma być uruchamiany pod konkretnym kontem użytkownika, Usługa sieciowa, System lokalny, zazwyczaj jest to usługa (lub aplikacja COM +)
  • Jeśli użytkownik potrzebuje pewnej kontroli nad nim, jest to zazwyczaj aplikacja obszaru powiadomień.
  • Jeśli musi powiadomić użytkownika o czymś, że jest to aplikacja obszar powiadomień

Zabawa zaczyna się, gdy masz potrzebę uruchomienia coś jako konto systemu, ale również interakcji z nim. IIS to dobry przykład tego, że jest usługą, ale administracja jest aplikacją - musi być uruchomiona przy starcie, potrzebuje dostępu do określonych rzeczy, których użytkownik nie może normalnie uzyskać (c: \ inetpub), ale użytkownik musi mieć możliwość uruchamiania, zatrzymywania i konfigurowania.

+0

Zabawa przychodzi wtedy, gdy trzeba uruchomić coś jako konto systemowe, ale także wchodzić z nim w interakcję. W rzeczywistości jest to mój problem ... Próbuję zrzucić informacje z dziennika z mojej usługi i przeanalizować je w mojej aplikacji Windows, która powiadamia użytkownika ... nie jestem pewien, czy mój projekt jest właściwy ... – Mugunth

+1

No cóż, istnieje wiele sposobów na zrobienie tego, moje własne preferencje, ponieważ używam ich tak bardzo, to znaczy, że host usługi ma punkt końcowy WCF i kontroluje go w ten sposób. – blowdart

+4

Chciałbym dodać do listy: Jeśli potrzebuje uruchomić bez użytkownika zalogowanego na komputerze, jest to usługa. –

3

Uważam, że twoja decyzja jest prawie w porządku, jednak dodałbym jeszcze jeden warunek. Weźmy na przykład usługę mysqld (masz wybór w tym przypadku, ale większość ludzi uruchamia ją jako usługę). Jest uruchamiany jako usługa, ponieważ chcesz uzyskać dostęp do usługi w dowolnym momencie za pośrednictwem potencjalnie wielu aplikacji. Ważne jest, aby odpowiadał on wszystkim aplikacjom, które go wywołują, i sam w sobie nie jest niczym, poza oczekiwaniem na obsługę innych aplikacji.

Po prostu coś, co mógłbym wziąć pod uwagę również przy podejmowaniu decyzji.

5

Chciałbym zaprojektować aplikację jako usługę, jeśli aplikacja ma krytyczny cel i nigdy (ani rzadko) powinna być zamknięta. Usługi systemu Windows zapewniają dobre opcje odzyskiwania po awarii, dobre powiadomienia (zobacz kartę odzyskiwania w usłudze).

Również dobry powód, aby korzystać z usług, to fakt, że mogą działać pod dowolnym użytkownikiem (jeśli więc wdrożysz je na zdalnym serwerze, możesz bezpiecznie wylogować się po uruchomieniu usługi bez obawy, że aplikacja zostanie zamknięta także).

Projektuję również usługi w połączeniu z aplikacją komputerową, która może wchodzić w interakcję z usługą i może być używana do monitorowania lub rekonfiguracji usługi podczas pracy. W ten sposób możesz korzystać ze wszystkich zalet aplikacji do obsługi podajników.

Nie należy jednak nadużywać korzystania z usług i używać ich, jak już wspomniałem, do zastosowań cirtical.

Powiązane problemy