Jakiś czas temu pisałem na temat tworzenia i instalowania serwisu Windows. Pokazałem wtedy prosty kod procedury Main, który uruchamia serwis:
static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; ServiceBase.Run( ServicesToRun ); }
W większości wypadków jest to dobre rozwiązanie, gorzej jeżeli chcemy uruchamiać również wytworzony plik "exe" dwuklikając na niego (lub wciskając "play" w VS). Jeżeli wykorzystaliśmy powyższy kod otrzymamy:
W sumie otrzymaliśmy precyzyjną informację co należy zrobić by uruchomić serwis, ale przecież nie o to chodziło. Czy można coś zrobić? Oczywiście !
Rozwiązanie pierwsze (trywialne, by nie powiedzieć prymitywne) to wykorzystanie linii poleceń do przekazania argumentu mówiącego: "uruchom normalnie", np. jeżeli argument będzie brzmiał "noservice", to będziemy mieli:
if ( m_cmmdLine.ToLower().Contains( "noservice" ) ) { Application.Run( new ServerForm( ) ); } else { ServiceBase.Run( new Service1() ); }
Rozwiązanie drugie jest trochę bardziej eleganckie i zakłada sprawdzenie kontekstu w jakim aplikacja jest uruchamiana:
if ( !Environment.UserInteractive ) { ServiceBase.Run( new Service() ); return; } else Application.Run( new ServerForm( ) );
Proste prawda?
Ten wpis jest bardzo ciekawy
OdpowiedzUsuń