PDA

View Full Version : [.NET]Servizi di Windows: possono visualizzare finestre o altre applicazioni a video?


Dave83
04-03-2008, 11:22
Praticamente vorrei sapere se è come un servizio può interagire con l'utente.
A me per l'occasione serve che i dati che calcola il mio servizio, vengano visualizzati all'utente in modo automatico.

Solo che ovviamente i Windows Service non possono ne visualizzare Form ne MsgBox (o almeno col metodo classico per le WinForm va in errore, ma non penso che si possa fare).
O altrimenti far sì che il mio servizio lanci un altra applicazione e che questa venga visualizzata, ma anche qui ho dei problemi: praticamente riesco si a lanciare l'applicazione (sia tramite la classe process che con il metodo shell), ma questa non si visualizza a video, rimane solo aperta in RAM.


Inoltre mi servirebbe un consiglio su come realizzare un progetto:
praticamente ho bisogno che l'utente possa schedulare delle operazioni (semplici scansioni di IP locali) e nelle date scelte venga lanciato questo servizio (o almeno mi è stato chiesto di farlo con un servizio) che una volta fatti i suoi calcoli, visualizzi all'utente i risultati.
E' possibile fare questo tramite un servizio vero e proprio o mi tocca per forza farlo tramite un applicazione che risiederà sempre in memoria?

0rph3n
04-03-2008, 12:09
Praticamente vorrei sapere se è come un servizio può interagire con l'utente.
A me per l'occasione serve che i dati che calcola il mio servizio, vengano visualizzati all'utente in modo automatico.

Solo che ovviamente i Windows Service non possono ne visualizzare Form ne MsgBox (o almeno col metodo classico per le WinForm va in errore, ma non penso che si possa fare).
O altrimenti far sì che il mio servizio lanci un altra applicazione e che questa venga visualizzata, ma anche qui ho dei problemi: praticamente riesco si a lanciare l'applicazione (sia tramite la classe process che con il metodo shell), ma questa non si visualizza a video, rimane solo aperta in RAM.
Secondo l'opinione di uno che non ha mai sviluppato un servizio (che sarei io :) ) potresti sviluppare una piccola applicazione che venga fatta partire in automatico all'accesso a windows e che se ne stia buona buona nella system tray finchè il servizio non le fa sapere che ha finito i suoi conti e gli passa i risultati.
A quel punto li visualizza!


Inoltre mi servirebbe un consiglio su come realizzare un progetto:
praticamente ho bisogno che l'utente possa schedulare delle operazioni (semplici scansioni di IP locali) e nelle date scelte venga lanciato questo servizio (o almeno mi è stato chiesto di farlo con un servizio) che una volta fatti i suoi calcoli, visualizzi all'utente i risultati.
E' possibile fare questo tramite un servizio vero e proprio o mi tocca per forza farlo tramite un applicazione che risiederà sempre in memoria?
ti rispondo con un link:
//TODONT: Use a Windows Service just to run a scheduled process (http://weblogs.asp.net/jgalloway/archive/2005/10/24/428303.aspx)

ciao


EDIT: tra l'altro, leggendo il link potresti scoprire che, anche per quanto riguarda l'applicazione di cui fai menzione nel primo punto del tuo post, quella di essere sviluppata "a la servizio" potrebbe non essere la scelta corretta.

kernel::panic
05-03-2008, 18:44
I serivizi possono avere un'interfaccia grafica solo se fatti girare con l'utente "SYSTEM" e attivando l'opzione "Consenti al servizio di interagire col desktop". Però ti sconsiglio di usare questo sistema perchè non funziona col "fast user switching" di Win.

La cosa migliore è fare un servizio senza interfaccia grafica (come il 99% dei servizi Win e il 100% dei demoni Unix) sul quale attivare il remoting. Creare poi un'applicazione WinForms (che partirà in automatico per ogni utente: [regedit]\HKLM\....\Run), che comunicherà col servizio tramite remoting. In questo modo anche utenti senza privilegi potranno fruire del servizio.

Ciao :)