wtorek, 20 października 2009

Serwis uruchamiać albo nie? oto jest pytanie.... [PL]

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?

Promuj

1 komentarz:

Posty powiązane / Related posts