Domanda

Nelle versioni precedenti di Windows precedenti a Vista era possibile che un servizio Windows interagisse con l'utente desktop correntemente connesso per visualizzare facilmente le informazioni sullo schermo dal servizio.In Windows Vista è stata aggiunta la Sessione 0 per motivi di sicurezza per isolare i servizi dal desktop.Qual è un modo semplice per comunicare tra un servizio e un'applicazione in esecuzione al di fuori della Sessione 0?Finora ho risolto il problema utilizzando TCP/IP per comunicare tra i due, ma sembra essere un modo un po' sciatto per farlo.

È stato utile?

Soluzione

È possibile utilizzare la memoria condivisa o la pipe denominata per facilitare anche l'IPC.Concettualmente è simile al TCP/IP, ma non devi preoccuparti di trovare una porta inutilizzata.

Devi assicurarti che gli oggetti con nome che crei abbiano il prefisso "Globale\" per consentire l'accesso ad essi da tutte le sessioni come descritto Qui.

Per quanto ne so, non è più possibile che un servizio interagisca direttamente con il desktop.

Altri suggerimenti

Per motivi di sicurezza, infatti, non è più possibile comunicare direttamente con il "desktop".Cos'è esattamente il "desktop", quando vivi su una macchina con più utenti attivi + sessioni remote?

Il modo generale per risolvere il problema è utilizzare app di servizio che comunicano tramite un meccanismo RPC (TCP/IP, IPC, canali remoti .Net su uno di questi, ecc.).È un po’ una seccatura, ma penso che i benefici valgano il cambiamento.

Affinché il servizio possa comunicare con il desktop, sei praticamente bloccato con uno dei meccanismi RPC.Il meccanismo di comunicazione remota .NET (IpcServerChannel) non è troppo difficile da implementare per questo scopo.

Anche con .NET un'applicazione desktop può inviare messaggi direttamente al servizio con il file ServiceController.ExecuteCommand.Questi comandi vengono ricevuti dal servizio tramite ServiceBase.OnCustomCommand.Questo è ancora più semplice da fare e sarebbe tutto ciò di cui hai bisogno se il controllo del servizio è il tuo unico requisito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top