Creazione di un semplice servizio windows

mercoledì 14 ottobre 2009 - 14.19

Pokino Profilo | Junior Member

Ciao, poichè ho alcuni problemi con i primi passi in questa direzione vi allego il codice chiedendovi per cortesia qualche aiuto per capire cos'è che non va:
vorrei creare un servizio (di test ovviamente) che alla partenza controlli se esiste un particolare file, altrimenti lo crei e vi scriva al fondo ogni 10 secondi una riga di testo. Alla fine si stoppi.

Problema: il servizio scrive la prima riga e poi basta.. Se vado in debug scrive qualche riga a caso (me ne salta alcune, forse perchè in debug il comportamento non è lineare?)..

Aiuto..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

alx_81 Profilo | Guru

>Ciao,
Ciao

>poichè ho alcuni problemi con i primi passi in questa direzione
>vi allego il codice chiedendovi per cortesia qualche aiuto per
>capire cos'è che non va:
Ma come fai a far passare i 10 secondi?
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Pokino Profilo | Junior Member

ovviamente esiste un timer, nn l'ho riportato perchè il codice è generato in automatico inserendo il componente.. eccolo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

alx_81 Profilo | Guru

>ovviamente esiste un timer, nn l'ho riportato perchè il codice
>è generato in automatico inserendo il componente.. eccolo:
Non sembra in effetti ci sia nulla di male. Prova a mandarmi in allegato il progetto di test. Vedo che succede, così su due piedi non trovo nulal di male.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Pokino Profilo | Junior Member

ecco tutto..
grazie

alx_81 Profilo | Guru

>ecco tutto..
>grazie
Hai scoperto qualcosa di nuovo? Confermo che non trovo nulla di male in quanto mi hai passato. Spero di aver creato tutto quanto correttamente.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Pokino Profilo | Junior Member

In verità ho una nuova versione suggeritami da un utente di un altro forum, che funziona anche se nessuno dei 2 ha piena cognizione dei motivi..

protected override void OnStart(string[] args) { } protected override void OnStop() { fs.Close(); } // scatta ogni 60 secondi (ora 10) private void timerSchedulazioni_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { StreamWriter myWriter = new StreamWriter(File.Open(_percorso, FileMode.Append, FileAccess.Write)); // aggiorno il contatore _conta++; // scrivo il contatore myWriter.WriteLine(System.DateTime.Now.ToShortTimeString() + " - " + _conta); myWriter.Flush(); // chiudo il writer myWriter.Close(); if (_conta >= 4) { timerSchedulazioni.Stop(); //this.Stop(); } }

1. sinceramente non capisco perchè ma così scrive veramente il file ogni 10 secondi.. mi piacerebbe sapere come mai prima non funzionava in previsione di costruire un servizio davvero utile

2. ho visto che se uso timer.Stop() la scrittura ovviamente si interrompe, se invece uso this.Stop() non succede nulla mentre pensavo che il servizio si stoppasse..
secondo te?

grazie

alx_81 Profilo | Guru

>1. sinceramente non capisco perchè ma così scrive veramente il
>file ogni 10 secondi.. mi piacerebbe sapere come mai prima non
>funzionava in previsione di costruire un servizio davvero utile
forse perchè usavi il metodo initializecomponent..

>2. ho visto che se uso timer.Stop() la scrittura ovviamente si
>interrompe, se invece uso this.Stop() non succede nulla mentre
>pensavo che il servizio si stoppasse..
>secondo te?
Di solito scrivo nell'onStart quello che mi serve che venga eseguito e nell'OnStop quello che mi disalloca le informazioni. E' corretto fermare il timer, lo stop del servizio si verifica quando lo stoppi proprio da windows dal service manager.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Pokino Profilo | Junior Member

? initializecomponent è nel costruttore, mica lo chiamo volontariamente, e comunque resiste e persiste anche nella versione 2, semplicemente non l'ho riportato..
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5