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?










Maciej_Zbrzezny on delicious.com
Ten wpis jest bardzo ciekawy
OdpowiedzUsuń