Avviare applicazione da servizio C#

venerdì 18 maggio 2007 - 15.51

hydra Profilo | Junior Member

Salve a tutti.

Ho un'applicazione con 3 livelli di accesso; solamente con il livello più alto posso tornare a windows, mentre con gli altri 2 livelli posso solo spegnere il computer. Fin qui nessun problema. Volevo evitare che si possa terminare l'applicazione dal task manager e per questo sto sviluppando un servizio che ciclicamente controlla che l'applicazione sia in esecuzione; quando non trovo l'applicazione in esecuzione vado ad aprire un file xml dove mi sono salvato un parametro che mi dice se sono uscito normalmente (che vado a settare all'interno dell'applicazione). Se questo parametro non è come me lo aspetto voglio che il computer si spenga.
Fin qui tutto normale, funziona tutto sia nell'applicazione sia nel servizio, l'unica cosa che non va è lo spegnimento del computer da servizio. Mi sapete indicare se si può spegnere il computer da un servizio e se si come si fa? Io ho provato a fare così:

Process.Start("ShutDown.exe -s -t 00 -f");

però non funziona. Dove sbaglio? Tenete conto che è il primo servizio che faccio e che sono un neofita di C#

munissor Profilo | Senior Member

Hai già provato Process.Start("shutdown.exe","parametri"); ?

Se neanche così funziona dovresti o ottenere il codice di uscita di shutdown (Process.ExitCode) e vedere a cosa corrisponde.
Assicurati inoltre che l'utente con cui gira il servizio (System, LocalService, NetworkService o un tuo utente) abbia le autorizzazioni necessarie eseguire ciò che deve fare.

hydra Profilo | Junior Member

Perfetto, infatti con
Process.Start("comando", "parametri");

funziona tutto perfettamente. Grazie mille.

hydra Profilo | Junior Member

Riesumo questo vecchio post perchè adesso vorrei fare un'altra cosa.
Il servizio di base è sempre lo stesso, ora vorrei però implementare una interfaccia grafica che mi controlli le opzioni e i settaggi del servizio. Mi sapete dire come si fa per interagire con il servizio? Voglio evitare di scrivere file o chiavi di registro, quindi se si potesse accedere direttamente alle variabili del servizio sarebbe oro.

munissor Profilo | Senior Member

I servizi vengono eseguiti in un desktop separato, quindi non è possibile utilizzare finestre direttamente all'interno del servizio.

Secondo me con C# la scelta più opportuna è il remoting. Utilizzando il servizio come "server" fa in modo che il client si connetta tramite remoting (utlizzando named pipes) e modifichi le variabili direttamente nel servizio in esecuzione.

Un'altra strada possibile è (come dicevi tu) la creazione di file o chiavi di configurazione..

Ciao

hydra Profilo | Junior Member

Tnx
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-2014
Running on Windows Server 2008 R2 Enterprise, SQL Server 2008 & ASP.NET 3.5