Hoofdstuk 8 - Les 3

Met services kunnen assemblies uitgevoerd worden op de achtergrond, zonder de interactie van de gebruiker. Services zijn handig op het moment dat bepaalde zaken gemonitord moeten worden.

Om eenservice tijdens ontwikkeling te testen kan neit gebruik gemaakt worden van de F5 toets, de service moet eerst geinstalleerd worden en dan een kan er een debugger aan gehangen worden.

De Main methode moet de Run methode aanroepen. Deze methode laad een service in het Service Control Manager.

Een service kent geen dialog boxes omdat een service geen interactie kent met de gebruiker. Daarom heeft hij ook geen GUI. Eventuele loge moeten in het Windows event log worden weggeschreven.

Services worden in hun eigen beveiligingscontext uitgevoerd en worden gestart voordat de user inlogt. Hoe meer permissies de service heeft, des te meer schade kan er aangericht worden door een hacker. Let daarom op onder welk account (met alleen de noodzakelijke rechten) een service wordt uitgevoerd.

De ServiceBase.ServiceName property is de unieke naam voor een service. Deze property wordt gebruikt door Windows om de service te benaderen. Dit is NIET de naam die je ziet in de Service Snap-In.

De service moet eerst geinstalleerd worden voordat hij kan worden uitgevoerd. Tijdens ontwikkeling kan gebruik gemaakt worden van de ServiceInstaller en ServiceProcessInstaller classes.

  • ServiceInstaller: beschrijving, display naam, service naam en start type.
  • ServiceProcessInstaller: service account instellingen

In de praktijk zullen deze classes niet handmatig te hoeven ingesteld, dat doet VS automatisch.

Security contexten:

  • LocalService: Voor minimale risico's. Deze service wordt uitgevoerd in de context van een account die non-privilege heeft op de lokale machine. Als er credentiials nodig zijn, logt hij als anonymous in.
  • NetworkService: Maakt het mogelijk voor de service om te authentificeren op een andere computer op het netwerk.
  • LocalSystem: De service wordt uitgevoerd met bijna ongelimiteerde privileges en presenteert de credentials van de computer aan elke remote server. Dit account type kent veel risico's: kwaadwillende kunnen een zwak punt exploiteren en op deze wijze de computer overnemen.
  • User: Hierbij vraagt het systeem om gebruikersnaam en wachtwoord wanneer de service wordt geinstalleerd (tenzij de gebruikersnaam en wachtwoord zijn ingesteld op de ServiceProcessInsteller instantie). Dit is de standaard account type.

Een service kan handmatig geinstalleerd worden m.b.v. InstallUtil.exe:

InstallUtil en deinstalleren: InstallUtil /u

Via code kan een service worden beheerd d.m.v. de System.ServiceProcess.ServiceController class:

ServiceController sc = new ServiceController("Server");

sc.Stop();

Thread.Sleep(2000);

sc.Start();

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren