--------------------------- Błąd uruchomienia usługi systemu Windows --------------------------- Nie można uruchomić usługi z wiersza polecenia lub z debugera. Usługa systemu Windows musi być najpierw zainstalowana (przy użyciu pliku installutil.exe), a następnie uruchomiona za pomocą Eksploratora serwera, Narzędzi administracyjnych usług systemu Windows lub polecenia NET START. --------------------------- OK ---------------------------Pozostaje pytanie co z tym fantem zrobić? Jak na razie spotkałem się z kilkoma różnymi sposobami, np:
- Wymuszenie odpalenia debugera poprzez System.Diagnostics.Debugger.Launch()
- Stosowanie pętli oczekującej na podpięcie debugera System.Diagnostics.Debugger.IsAttached
- Zmieniamy rodzaj aplikacji na konsolową (wartość Output Type, zakładki Application, w Properties danego projektu) dzięki czemu zyskujemy wgląd w konsolę
- Dodajemy kod umożliwiający odpalenie implementacji OnStart i OnStop przeciążonych po ServiceBase:
public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } internal void Start(string[] args) { OnStart(args); } internal void Stop() { OnStop(); } protected override void OnStart(string[] args) { //... } protected override void OnStop() { //... } }
- Podmieniamy standardową metodę Main na:
static void Main(string[] args) { Service1 svc = new Service1(); if (Environment.UserInteractive) { Console.WriteLine("Starting..."); svc.Start(args); Console.WriteLine("Started"); Console.ReadLine(); Console.WriteLine("Stopping..."); svc.Stop(); Console.WriteLine("Stopped"); } else { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { svc }; ServiceBase.Run(ServicesToRun); } }
PS. Równie dobrze, zamiast konsoli można przygotować aplikację okienkową, nie ma tutaj ograniczeń, idea pozostaje niezmieniona.