2010-01-24 15 views

risposta

43

Un servizio Windows viene eseguito sempre all'avvio del computer (a condizione che sia configurato). Un EXE standard viene eseguito solo quando un utente ha effettuato l'accesso e si interromperà se l'utente si disconnette.

Si potrebbe utilizzare un servizio di Windows per le cose che hanno sempre bisogno di correre, anche se nessuno è connesso.

Si potrebbe utilizzare un EXE standard per i programmi che un utente verrà eseguito mentre si è connessi.

2

A il servizio è (di solito) è un exe standard senza interfaccia utente. Può essere eseguito anche quando non ci sono utenti registrati nella macchina, ed è diritti di accesso e la visualizzazione del file system non dipende da quale utente è connesso.

+1

Non accurato al 100%. Un servizio deve soddisfare alcuni requisiti aggiuntivi oltre a essere un exe standard senza interfaccia utente. –

+0

sì alcuni requisiti e una API diversa a cui ha accesso, ma sempre un EXE standard. –

+0

Il servizio Agente SQL Server non ha l'interfaccia semaforo? Questo è un servizio se non sbaglio? – LearningCSharp

31

Un servizio Windows ha una funzione speciale ServiceMain e deve rispondere a I comandi SCM (Service Control Manager) correttamente per essere funzionali come servizio. D'altra parte, un eseguibile regolare ha una funzione main o WinMain e non ha bisogno di rispondere a particolari comandi di controllo.

+5

Tecnicamente corretto ma non penso che risponda molto bene alla domanda. (Vedi la risposta di Eric J). – Ash

+0

Le risposte di Greg ed Eric funzionano, ma posso segnarne solo una corretta :-( – LearningCSharp

+1

Penso che sia una risposta molto più corretta di quella scelta, l'altra risponde meglio alla domanda "Cos'è un servizio di Windows". –

12

Se si sta parlando di attuazione di un'operazione di sfondo, ecco i criteri vi consiglio di scegliere un servizio o un exe finestra-meno:

Scegliere un exe se:

  • Ne hai bisogno per l'esecuzione per utente e solo quando un utente è connesso
  • È necessario interagire con il desktop di Windows (icone di notifica, ecc.)
  • Ha bisogno di tutti i privilegi del login in utente (né più né meno)

Scegliere un servizio se:

  • Potrebbe essere necessario eseguire quando nessuno è connesso
  • E in genere non ha bisogno di dati per utente o privilegio
  • Si comunica esclusivamente con la rete
  • Ha bisogno di esporre nuovi oggetti "sicuri". Oggetti con elenchi di controllo di accesso dichiarativo (DACL) che limitano l'accesso a determinati account/gruppi.
  • Richiede autorizzazioni speciali che potrebbero non essere disponibili per l'utente che ha effettuato l'accesso.

I servizi possono essere facilmente buchi di sicurezza, quindi preferisci .exe ai servizi. A volte avrai bisogno di entrambi. Un correttore di virus deve essere in grado di accedere a tutti i file sul filesystem (che l'utente corrente potrebbe non essere in grado di fare), ma deve anche fornire informazioni all'utente sotto forma di finestre di dialogo/pop-up di notifica e uno strumento icona del vassoio. I servizi non possono interagire direttamente con la GUI dell'utente. Possono utilizzare i servizi standard di Windows IPC (comunicazione tra processi) come pipe e aree di memoria condivisa. Tali strumenti di solito hanno sia un servizio che un file exe senza finestre per utente che comunica con il servizio utilizzando le pipe di Windows o le aree di memoria condivisa.

Ottieni "Programmazione di Windows Security" di Keith Brown se vuoi approfondire questi argomenti.

+0

Nit minore: la D in DACL sta per Discretionary –

+0

"Si comunica solo con la rete", Questo non è corretto, i servizi possono fare molte altre cose rispetto all'accesso alla rete – Ash

+1

Non tutti i servizi Win32/64 comunicano solo con la rete, ma tutti i daemon che necessitano solo di comunicare con la rete sono quasi sempre meglio implementati come servizi durante la programmazione su Win32/64. Intendevo che l'elenco descrivesse scenari in cui i servizi avevano senso, non circoscrivendo ogni caso d'uso per i servizi di Windows. –

1

Dal punto di vista di EXE Binary e dal punto di vista della libreria C del compilatore, un servizio di Windows sembra esattamente come un programma Unix standard o un programma di console Windows. cioè con il punto di ingresso main(). Ciò che rende diverso un servizio è come viene caricato/invocato da Microsoft Windows (dal registro, solitamente all'avvio). Un servizio può (e dovrebbe) comunicare all'applicazione SC.exe [Service Control Manager] tramite chiamate API Windows, che il servizio sia avviato, arrestato, sospeso, ecc.

Problemi correlati