Perché un'applicazione in esecuzione come account di sistema su Windows quando disconnessione

StackOverflow https://stackoverflow.com/questions/970765

  •  13-09-2019
  •  | 
  •  

Domanda

Ho un'applicazione C # che viene lanciato con l'account di sistema su una macchina e presenta alcune finestre di dialogo a un utente. Quando un utente normale si disconnette l'applicazione viene terminata pure. Avrei pensato che, poiché la sua esecuzione con l'account di sistema che avrebbe continuato a funzionare nonostante l'utente non essere collegati.

Tutte le informazioni su cui questo accade sarebbe apprezzato.

È stato utile?

Soluzione

Se volete che il vostro app per continuare a correre dopo che l'utente è disconnesso (ad esempio per mantenere lo stato per tutto il tempo che il computer esegue), è necessario un servizio. Tuttavia, i servizi sono fortemente scoraggiate dalla visualizzazione dell'interfaccia utente. Se avete bisogno di entrambi di lunga esecuzione e interfaccia utente, non crei un servizio per memorizzare i dati, e un'applicazione che viene eseguita ogni volta che un utente si connette che mostra UI e interagisce con il servizio.

Altri suggerimenti

è l'applicazione di un servizio? Sembra che ciò che si vuole è un servizio. Si noti che è possibile eseguire qualsiasi processo come qualsiasi utente, ma che non lo rende un servizio. Se il processo viene implementato come un servizio, allora continuerà a funzionare anche in assenza di utenti collegati.

Questa è una caratteristica di sicurezza quando una sessione utenti finisce applicazioni che invocati sono terminati. Se avete bisogno di un'applicazione per l'esecuzione al di fuori di una sessione di utenti avete bisogno di un servizio, comunque, dal momento che la sua in propri servizi di sessione cant "raggiungono in" sessione agli utenti messaggi e così via.

È necessario eseguire l'applicazione come servizio di Windows.

Sarà necessario creare la vostra applicazione come servizio di Windows. Se l'applicazione visualizza finestre di dialogo, allora si avrebbe bisogno di controllare il 'servizio di Permettono di interagire con il desktop' ed eseguirlo sotto l'account di sistema locale.

Tuttavia, un approccio migliore sarebbe quello di esporre un'interfaccia queryable dalla vostra applicazione utilizzando WCF o Remoting che è possibile visualizzare per gli utenti che utilizzano un'applicazione separata. Se si desidera che le notifiche dalla tua app quando nessuno è connesso allora si potrebbe prendere in considerazione l'invio di messaggi di posta elettronica o la pubblicazione di eventi a un WCF / Servizi Web / Remoting endpoint separato.

Poiché il processo è stato avviato da explorer.exe, che sarà terminato quando l'utente si disconnette indipendentemente da ciò che conto è in esecuzione sotto. Questo è semplicemente il modo in Windows funziona. Per permettere al processo di continuare a funzionare ha bisogno di essere un servizio o, eventualmente, avviato dalla task scheduler.

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