Home Page Home Page Articoli Costruire un Servizio di Windows usando .NET

Costruire un Servizio di Windows usando .NET

Un avanzato tutorial che vi spiegherà passo passo e in modo dettagliato le istruzioni per costruire un Servizio Windows, utilizzando ciò che il .NET Framework ci mette a disposizione. Disponibile sia codice C# che VB.NET.
Autore: Giovanni Ferron Livello:
Prima di .NET creare un servizio windows era una impresa da Titani della programmazione, o comunqe servivano molte conoscenze, ma con Visual Studio .NET abbiamo la possibilità in pochi minuti di creare un servizio windows.
Il seguente articolo spiega come creare un servizio windows che controlla l?esistenza di un file in una directory, e scrive un file di log. Il codice presentato nell?articolo è scritto in C#, ma l?allegato all?articolo contiene il progetto in C# e in VB.NET.

Pronti ?. Via!
Diamo il nome al progetto ?sharpService?, scegliamo la directory del progetto e clicchiamo OK.
Il progetto contiene di default 2 file: AssemblyInfo.cs e Service1.cs che è il nostro servizio.

La selezione del tipo di progetto
La selezione del tipo di progetto


Service1.cs
Analizzando il codice che ci viene presentato in automatico da Visual Studio .NET troviamo i seguenti metodi:


public Service1(){} //Costruttore della classe
static void Main(){} //Main del progetto
private void InitializeComponent(){} //Metodo che inizializza i componeti del servizio
protected override void Dispose(){} //Metodo che ?pulisce? le risorse utilizzate
protected override void OnStart(){} //Metodo che viene scatenato all?avvio del servizio
protected override void OnStop(){} //Metodo scatenato allo stop del servizio


Di tutti questi metodi quelli che utilizzeremo sono OnStart e OnStop.

App.config
Creiamo un file di configurazione con le variabili del nostro servizio. Per creare un file di configurazione posizionarsi sul solution explorer, tasto destro -> New item -> Application configuration file.

Creazione del File di Configurazione
Creazione del File di Configurazione


All?interno del nostro file inseriamo le seguenti variabili:


<configuration>

<appSettings>

<!-- Path da controllare -->
<add key="strControlPath" value="C:\" />
<!-- File da controllarne l'esistenza -->
<add key="strEndCodeFile" value="test.xml" />
<!-- File di log -->
<add key="strLogFile" value="C:\log.txt" />

</appSettings>
</configuration>


Service1.cs
Ora scriviamo il nostro servizio, prima importando i seguenti namspace:
System.IO : Per la scrittura del file di log
System.Configuration : Per leggere il file App.config

Ora dichiariamo il nostro timer, che ogni 5 secondi (o quanti ne volete), controllera l?esistenza del nostro file:


private System.Timers.Timer myTimer = new System.Timers.Timer(5000);


Inoltre dichiariamo anche tutte le alter variabili che abbiamo impostato nel file di configurazione. A questo punto dobbiamo creare un Handler sul timer per poter scatenare il metodo che controllerà l?esistenza del file.


this.myTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.myTimer_Elapsed);


Ora abbiamo il timer e un Handler dobbiamo creare il metodo che eseguirà le nostre operazioni


private void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e){}


La funzione scatterà ogni 5 secondi (o il tempo che è stato deciso), ed eseguirà una serie di operazioni, nel nostro caso dovremo controllare l?esistenza di un file e di seguito aprire un file di testo e scrivere una linea di testo.

Metodo blnCheckExists
Il metodo controlla l?esistenza di un file. Per fare ciò creiamo un oggetto fileInfo, passando il parametro strFilePath, percorso del nostro file.


FileInfo myCheckFile = new FileInfo(strFilePath);


Ora con un semplice if controlliamo l?estenza del nostro file.


if (myCheckFile.Exists){}


Metodo writeTxtFile
Il metodo scrive un messaggio all?interno di un file di testo, aggiungendo una riga ad ogni chiamata. Per poter scrivere un file di testo dobbiamo creare 2 oggetti:
FileStream : Per poter aprire il file di testo in lettura o scrittura
StreamWrite : Per poter scrivere la riga di testo ne file di log


public void writeTxtFile(string strMessage){
//Oggetto FileStream
myFileStream = new FileStream(strLogFile, FileMode.Append, FileAccess.Write, System.IO.FileShare.None);
//StreamWriter per scrivere il file di testo
System.IO.StreamWriter myWriter = new StreamWriter(myFileStream);
//Scrivo la linea nel file di log
myWriter.WriteLine(System.DateTime.Now.ToString() + " - " + strMessage);
//Chiudo gli oggetti
myWriter.Close();
myFileStream.Close();
}



Creazione dell'Installer
Per poter utilizzare il nostro servizio dobbiamo creare un ?installer?, l?installer non è altro che una classe che descrive le proprietà del nostro servizio. Per poter creare un installer bisogna posizionarsi sulla scermata di design del nostro servizio, tasto destro > Add Installer.

Aggiunta dell'Installer
Aggiunta dell'Installer


A questo punto viene in automatico viene creato un file .cs con due componenti, il service procedure installer e il service installer.

Service Process Installer e il Service Installer
Service Process Installer e il Service Installer


Il Service Process Installer ci permette di definire quale utente può far partire il servizio, da menu proprietà è possibile scegliere queste opzione. Mentra il Service Installer ci permette di decidere il metodo di start del servizio e il nome visualizzato nella consolle di gestione dei servizi.

Le Proprietà di Service Process Installer e del Service Installer
Le Proprietà di Service Process Installer e del Service Installer



Come installare il servizio
Ora che abbiamo scritto il codice del nostro servizio non dobbiamo far altro che installarlo. Se cerchiamo di eseguire il servizio da Visual Studio .Net ci comparirà il seguente alert di errore.

E' Impossibile avviare un servizio da command line o da un debugger
E' Impossibile avviare un servizio da command line o da un debugger


Visual studio ci avverte che dobbiamo installare il servizio utilizzando l?utility installUtil.exe, per far ciò dobbiamo aprire il prompt di visual studio dal menù programmi

Il prompt dei comandi di Visual Studio .NET
Il prompt dei comandi di Visual Studio .NET


Una volta aperto il prompt bisogna posizionarsi nella directory bin del nostro progetto ed eseguire la nostra utilità con il seguente comando:

installUtil.exe [NomedelProgetto].exe

A questo punto il nostro servizio è stato installato, e per vederne le proprietà basta andare nella consolle dei servizi di Windows.
Per disinstallare il nostro servizio bisogna riaprire la consolle di prompt di Visual Studio .NET, posizionarsi nella directory bin del nostro progetto ed eseguire il seguente comando:

installUtil.exe /u [NomedelProgetto].exe
Voto medio articolo: 4.4 Numero Voti: 19

File allegati


Giovanni Ferron

Giovanni Ferron

Sviluppatore dal 2000. Collabora a grandi progetti nella creazione di portali e intranet aziendali. Attualmente ha lasciato la terra natia per una nuova avventura in Australia, dove lavora come programmatore web per una emittente radio Australiana. Profilo completo

Articoli collegati

Importare dati di Excel con .NET tramite ODBC o OLEDB e Drag & Drop
Spesso in ambito aziendale è necessario adattare le proprie applicazioni e consentire che possano leggere e operare su file e dati provenienti dai tools della suite di Office fra cui uno dei più usati è Excel. Vediamo quindi come importare dati da file XLS tramite ODBC/OLEDB e Drag & Drop.
Autore: Marco Farina | Difficoltà:
Gestire le Access Control List (ACL) NTFS di file e directory con .NET
Scopriamo come nel .NET Framework 2.0 sia diventato facile recuperare e modificare la lista controllo accessi dei file e directory e in generale come gestire le ACL.
Autore: Marco Caruso | Difficoltà: | Commenti: 1 | Voto:
Costruire un client FTP usando il .NET Framework 2.0
In questo articolo tratteremo una delle novità più attese del .NET Framework 2.0, le classi per l'utilizzo del protocollo FTP. Realizzeremo un mini client FTP con alcune fra le funzionalità più comuni.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 28
Alla scoperta di WMI, questo sconosciuto
WMI o Windows Management Instrumentation è un componente fondamentale del sistema operativo Windows. La sua utilità è permettere l'accesso a informazioni fondamentali del sistema, come informazioni sull'hardware, software, servizi, ecc. Vediamo come sfruttarlo con .NET.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 2
Gestire e sfruttare i campi BLOB usando .NET
I database server sono software con una potenza elevata e offrono una vasta gamma di features che spesso non vengono utilizzate. Una di queste sono i campi BLOB (campi per contenere dati in formato binario). Vediamo in questo articolo come utilizzarli con .NET.
Autore: David De Giacomi | Difficoltà: | Commenti: 13
Catturare immagini da una Webcam con .NET
In questo articolo mostreremo come è possibile costruire una applicazione per catturare immagini da una Webcam, utilizzando componenti già presenti in Windows, in questo caso l' Avicap32.dll
Autore: Giovanni Ferron | Difficoltà: | Commenti: 22 | Voto:
Usare il protocollo POP3 per creare un Client di posta
Volete costruirvi un client di posta? Volete costruire una Web Mail ? Ecco un articolo che vi introduce al protocollo POP3 e vi insegna come costruire un mini client di posta elettronica.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 2 | Voto:
La stampa di una Win Form
Vedremo in questo articolo i passi necessari per creare una stampa sia di testo che di grafica di una WinForm attraverso .NET.
Autore: Marco Caruso | Difficoltà: | Commenti: 9 | Voto:
Creare un Setup di un progetto con Visual Studio .NET
Ecco delle semplici ma dettagliate istruzioni passo-passo per costruire un pacchetto di Setup (Setup Package) per le nostre Applicazioni WinForms.
Autore: Marco Caruso | Difficoltà: | Commenti: 18
Creare un?icona nella Taskbar di Windows con .NET
Scoprirete come potenziare la vostra applicazione aggiungendo un'icona nella barra di Windows nella famosa Tray Area a fianco dell'orologio del sistema. Disponibile sia codice VB.NET che C#.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 1 | Voto:
Windows XP Visual Styles con .NET e Win Forms
Come usare lo stile XP nelle vostre applicazioni .NET ? Questo articolo vi spiega come applicare a Buttons, Textbox, ListViews (ai controlli di Windows in genere) lo stile/tema grafico della GUI introdotto dal sistema operativo Windows XP.
Autore: David De Giacomi | Difficoltà: | Commenti: 7
Come sfruttare le funzioni di una DLL unmanaged esterna creata in C/C++
Come usare la classe DllImportAttribute messa a disposizione dal namespace System.Runtime.InteropServices per sfruttare le funzioni di una DLL unmanaged Win32 old-style scritta con Visual C++ 6.0
Autore: David De Giacomi | Difficoltà: | Commenti: 4 | Voto:
Creare una DLL in Visual C++ 6.0
Vedremo in questo articolo come creare una Dynamic Link Link Library, comunemente chiamata DLL con Visual C++ 6.0. Questo passo è necessario per poi dimostrare l'utilizzo di librerie C/C++ in .NET tramite il package System.Runtime.InteropServices
Autore: David De Giacomi | Difficoltà: | Commenti: 11 | Voto:
Copyright © dotNetHell.it 2002-2014
Running on Windows Server 2008 R2 Enterprise, SQL Server 2008 & ASP.NET 3.5