Servizi Windows autoinstallanti

E’ noto che per installare un Windows Service bisogna ricorrere al tool InstallUtil, che si occupa di eseguire tutte le configurazioni necessarie affinche il nostro eseguibile possa essere gestito come servizio di sistema.

Spesso si trovano eseguibili che possono operare come servizi di sistema semplicemente invocandoli con particolari parametri sulla linea di comando, ad esempio:

  • MyService.exe –installservice
  • MyService.exe -uninstallservice

Per aggiungere una funzionalità simile al nostro Windows Service, basta andare a curiosare all’interno di InstallUtil.exe con il fido Reflector, per accorgersi che in realtà il tool non fa altro che passare gli argomenti in ingresso sulla riga di comando alla classe ManagedInstallerClass:

image

Nulla ci vieta di fare la stessa cosa all’interno del nostro codice, quindi, dopo aver aggiunto la reference all’Assembly System.Configuration.Install, possiamo aggiungere due metodi che si occupano di installare o disinstallare il servizio:

using System.Reflection;
using System.Configuration.Install;

private readonly string _serviceExe = Assembly.GetExecutingAssembly().Location;

private void InstallService()
{
    ManagedInstallerClass.InstallHelper(new string[] { _serviceExe });
}

private void UninstallService()
{
    ManagedInstallerClass.InstallHelper(new string[] { "/u", _serviceExe });
}

Fatto questo, basta controllare quali parametri sono stati specificati sulla linea di comando ed agire di conseguenza:

if (args.Length > 0 && (args[0].StartsWith('-') || args[0].StartsWith('/')))
{
    switch (args[0].Substring(1).ToLower())
    {
        case "installservice":
            InstallService();
            break;
        case "uninstallservice":
            UninstallService();
            break;
    }
}

In questo modo, possiamo fare il deploy del nostro servizio senza essere dipendenti da InstallUtil.

Technorati Tags: ,

Print | posted on Sunday, May 9, 2010 10:25 PM

Comments on this post

# re: Servizi Windows autoinstallanti

Requesting Gravatar...
grazie utilissimo!!
Left by Babba on May 10, 2010 9:38 AM

# re: Servizi Windows autoinstallanti

Requesting Gravatar...
Ottimo post!
Left by Max on May 10, 2010 4:15 PM
Comments have been closed on this topic.