Errore 5: accesso negato all'avvio del servizio Windows


97

Ricevo questo errore quando provo ad avviare un servizio Windows che ho creato in C #:

testo alternativo

Il mio codice finora:

private ServiceHost host = null;

public RightAccessHost()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    host = new ServiceHost(typeof(RightAccessWcf));
    host.Open();
}

protected override void OnStop()
{
    if (host != null)
        host.Close();
    host = null;
}

Aggiorna # 1

Ho risolto il problema sopra concedendo le autorizzazioni all'account NETWORK SERVICE ma ora ho un altro problema:

testo alternativo

Aggiorna n. 2

Il servizio non può essere avviato. System.InvalidOperationException: il servizio "RightAccessManagementWcf.RightAccessWcf" non ha endpoint dell'applicazione (non infrastrutturale). Ciò potrebbe essere dovuto al fatto che non è stato trovato alcun file di configurazione per l'applicazione o perché non è stato possibile trovare alcun elemento del servizio corrispondente al nome del servizio nel file di configurazione o perché non sono stati definiti endpoint nell'elemento del servizio. in System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (descrizione di ServiceDescription) in System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (descrizione ServiceDescription, ServiceHostBase serviceHost) in System.ServiceModelaseInuntime.ServiceService.Service.Service.Service.Service.Service.Service.Service.Service.Service. Timeout TimeSpan) in System.ServiceModel.Channels.CommunicationObject.


2
Il tuo secondo problema non è facile da risolvere da quel messaggio da solo. Dovrai guardare nei registri degli eventi e vedere qual è il vero errore.
Matt Ellen

1
Controlla se l'account di sistema ha accesso alla cartella.
Sviluppatore

Risposte:


116

Mi rendo conto che questo post è vecchio, ma non esiste una soluzione marcata e volevo solo aggiungere come l'ho risolto.

Il primo Error 5: Access Deniederrore è stato risolto assegnando le autorizzazioni alla directory di output NETWORK SERVICEall'account.

Il secondo Started and then stoppederrore sembra essere un messaggio generico quando qualcosa ha danneggiato il servizio. Controlla il Visualizzatore eventi (in particolare "Windows Logs> Application") per il messaggio di errore reale.

Nel mio caso, era una cattiva impostazione di configurazione del servizio in app.config.


7
Ho modificato le autorizzazioni accedendo alla cartella utilizzando Esplora risorse, facendo clic con il pulsante destro del mouse, Proprietà, Protezione e quindi assegnando le autorizzazioni corrette all'account SERVIZIO DI RETE nell'elenco dei nomi utente.
Justin Skiles

Nel mio caso di "Errore 5", il servizio di rete non ha i diritti di accesso alla cartella dell'eseguibile. Poiché è per lo sviluppo, non volevo mettere i file nella cartella Program File ma in una cartella condivisa che avrei potuto copiare i file dalla macchina di sviluppo. Dare al servizio di rete i diritti di lettura / esecuzione / elenco dovrebbe essere sufficiente.
ZZZ

5
Aggiungo LOCAL SERVICE "e" NETWORK SERVICE "alla mia cartella bin \ Debug e funziona, grazie!
Hernaldo Gonzalez

3
Solo una nota per le persone: se la modifica delle autorizzazioni non risolve il tuo problema, assicurati di controllare il Visualizzatore eventi per gli errori. Ho riscontrato un errore SQL completamente non correlato che ha impedito l'avvio del servizio ma mi ha comunque restituito il messaggio "Errore 5: Accesso negato". errore.
dtryan

Grazie per la nota su "Visualizzatore eventi" - come me, errore non correlato "Endpoint non trovato" ma mascherato come "Accesso negato (5)"
David Votrubec

26

Computer -> Gestisci -> Servizio -> proprietà [il tuo servizio]. Quindi la scheda con le informazioni sull'account. Gioca con queste impostazioni, ad esempio esegui il servizio con un account amministratore o giù di lì.

Che ha fatto per me.

EDIT: quello che può anche essere il problema è che la maggior parte dei servizi viene eseguita come LOCAL SERVICEo LOCAL SYSTEMaccount. Ora quando esegui C:/my-admin-dir/service.execon quegli account ma non sono autorizzati a eseguire nulla in quella directory, otterrai error 5. Quindi individua l'eseguibile del servizio, RMB nella directory -> Proprietà -> Sicurezza e assicurati che l'account con cui viene eseguito il servizio sia nell'elenco degli utenti che sono autorizzati ad avere il pieno controllo sulla directory.


21

Questo ha funzionato per me.

  1. Fare clic con il tasto destro sulla cartella di primo livello contenente l'eseguibile del servizio. Vai a Proprietà
  2. Vai alla scheda "Sicurezza"
  3. Fai clic su "MODIFICA"
  4. Fai clic su "AGGIUNGI"
  5. Immettere il nome "SYSTEM", fare clic su OK
  6. Evidenzia utente SYSTEM e fai clic sulla casella di controllo CONSENTI accanto a "Controllo completo"
  7. Fare clic su OK due volte

11
"SYSTEM" non ha funzionato per me, ho semplicemente giocato e provato "SERVICE" - quello ha funzionato.
Exter

4
Aggiungere "SERVIZIO" e assegnargli "Controllo completo" ha funzionato per me - Windows 10.
Fredrik

Poiché la proprietà dell'account del mio ServiceProcessInstaller (nel mio ProjectInstaller) era impostata su LocalService, ho concesso le autorizzazioni complete all'account del servizio locale e questo ha funzionato!
Dave

14

Ho anche ricevuto lo stesso errore, risolto facendo clic con il pulsante destro del mouse su Servizio> Proprietà> Accedi> accedi come: Account di sistema locale.


Grazie. Ho avuto un problema con tor.exe --service start, e ora funziona a meraviglia!
Arman Karimi

Ha funzionato per me. Tuttavia, è comunque possibile specificarlo a livello di codice?
Sisir

Fatto. Fare clic con il pulsante destro del mouse su serviceProcessInstaller -> Proprietà -> Account e impostarlo su "LocalSystem" invece del valore predefinito "Utente". Installa il servizio e voilà.
Sisir

10

Assicurati che i Path to executablepunti a un eseguibile effettivo (Servizio clic destro -> Proprietà -> scheda Generale). Tramite powershell (e sc.exe) è possibile installare un servizio senza puntare a un eseguibile effettivo ... ehm.


Ho accidentalmente lasciato lì una cartella invece del file .exe. Per risolvere questo problema ho dovuto "sc delete servicenameXYZ" + riavviare il server per eliminare completamente il servizio e reinstallare il file .exe del servizio corretto. Poi inizia come un incantesimo. Grazie per questo post.
Honza P.

Mi hai salvato! Assegnazione della cartella, invece del percorso completo dell'eseguibile ... Arghhhh! Avrebbe dovuto avere un aspetto migliore ...
ilter

9

Ho la soluzione:

1. Go to local service window(where all services found)
2. Just right click on your service name: 
3. click on "properties" 
4. go to "log on" tab
5. select "local system account"
6. click "ok"

ora puoi provare ad avviare il servizio.


1
Ho già selezionato "Account di sistema locale" e ricevo ancora il messaggio.
user2568374

4

Nel mio caso non è stato verificato il seguito.

inserisci qui la descrizione dell'immagine


2
Per altri lettori come me: questo screenshot fa parte della finestra delle proprietà del servizio! Apri la finestra Servizi (Esegui: services.msc) e seleziona Proprietà dal menu contestuale che appare dopo aver fatto clic con il tasto destro sul servizio!
Mohamad

4

Ho ricevuto questo errore perché ho letto male la risposta accettata da qui: Crea il servizio Windows dall'eseguibile .

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

Per <path_to_service_executable>, stavo usando il percorso della cartella dell'eseguibile, ad es C:\Folder.

Deve essere il percorso dell'eseguibile , ad es C:\Folder\Executable.exe.


3

Per me, la cartella da cui doveva essere eseguito il servizio ei file in essa contenuti sono stati crittografati utilizzando l'opzione "Crittografa" di Windows. Rimuovendolo e - voilà!


Questo si è rivelato essere il problema per me: gli amministratori di sistema clown sul server che stavo usando avevano ruotato alcune manopole per fare in modo che tutte le directory avessero la crittografia NTFS per impostazione predefinita, quindi LocalSystem non ha effettivamente la chiave di crittografia per leggerle ...
KJ Tsanaktsidis

3

Questo errore si verifica quando c'è un errore nel tuo OnStartmetodo. Non è possibile aprire un host direttamente nel OnStartmetodo perché non si aprirà effettivamente quando viene chiamato, ma attenderà invece il controllo. Quindi devi usare un thread. Questo è il mio esempio.

public partial class Service1 : ServiceBase
{
    ServiceHost host;
    Thread hostThread;
    public Service1()
    {
        InitializeComponent();
         hostThread= new Thread(new ThreadStart(StartHosting));

    }

    protected override void OnStart(string[] args)
    {
        hostThread.Start();
    }

    protected void StartHosting()
    {
        host = new ServiceHost(typeof(WCFAuth.Service.AuthService));
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}

3

se hai un codice di errore di accesso negato 5. allora probabilmente nel tuo codice il tuo servizio sta cercando di interagire con alcuni file nel sistema come scrivere in un file di registro

apri la log onscheda delle proprietà dei servizi e seleziona l' opzione per consentire al servizio di interagire con il desktop, fai clic su consenti al servizio di interagire con il desktop


3

Una delle cause di questo errore è un'insufficienza di autorizzazioni (Authenticated Users) nella cartella locale. Per concedere l'autorizzazione per "Utenti autenticati" Apri la scheda di sicurezza nelle proprietà della tua cartella, Modifica e aggiungi il gruppo "Utenti autenticati" e Applica modifiche.

Una volta fatto ciò, ero in grado di eseguire servizi anche tramite l'account del servizio di rete (prima di questo ero in grado di eseguire solo con l'account di sistema locale).


2

Ho avuto il servizio Windows ospitato utilizzando OWIN e TopShelf. Non sono riuscito ad avviarlo. Stesso errore: "Accesso negato 5"

Ho finito per dare tutte le permanenti al mio bin / Debug.

Il problema non è stato ancora risolto.

Quindi ho dato un'occhiata ai log degli eventi e si è scoperto che Microsoft.Owin.Host.HttpListenernon era incluso nella libreria di classi contenente la classe di avvio OWIN.

Quindi, assicurati di controllare il registro degli eventi per identificare la causa principale prima di iniziare a entrare nelle permanenti, ecc.


2
Buon punto: l'errore "accesso negato" potrebbe non avere nulla a che fare con le autorizzazioni; controllare sempre il registro dell'applicazione nel Visualizzatore eventi.
mhenry1384

ciao, sto anche controllando questo, dov'è il percorso `. \ logs` a cui sto accedendo da topshelf ma non è lì
trasformatore

2

Nel mio caso, ho dovuto aggiungere "Authenticated Users" nell'elenco di "Group or User Names" nella cartella in cui era installato l'eseguibile.


1

Il codice potrebbe essere in esecuzione nel contesto di sicurezza di un utente a cui non è consentito avviare un servizio.

Dato che stai usando WCF, immagino che tu sia nel contesto di NETWORK SERVICE.

vedere: http://support.microsoft.com/kb/256299


1
Ho concesso i diritti "SERVIZIO LOCALE" e "SERVIZIO DI RETE" sulle mie directory di output
Kris-I

È inoltre necessario impostare criteri di gruppo per i servizi di sistema, support.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji

1

Utilizza l'account LocalSystem invece dell'account LocalService nel programma di installazione del servizio.

Puoi farlo effettuando le seguenti modifiche nella visualizzazione struttura del tuo programma di installazione del servizio:
Proprietà del programma di installazione del processo di servizio -> Imposta account su LocalSystem.

o modificando di seguito nel file designer.cs del programma di installazione del servizio:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

1

Fare clic con il tasto destro del mouse su servicein service.msc e selezionare property.

Vedrai un percorso della cartella Path to executablecome C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Vai a C: \ Users \ Me \ Desktop \ project \ Tor e fai clic con il tasto destro su Tor.

Selezionare property, security, edite poi add. Nel campo di testo immettere LOCAL SERVICE, fare clic su OK e quindi selezionare la casellaFULL CONTROL

Fare di addnuovo clic su quindi entrare NETWORK SERVICE, fare clic ok, selezionare la casellaFULL CONTROL

Quindi fare clic su ok (in basso)


0

Dai un'occhiata Process Utilities > Process monitorda http://www.sysinternals.com .

Questo è uno strumento che ti consente di monitorare ciò che fa un processo. Se monitorate questo processo di servizio, dovreste vedere un accesso negato da qualche parte e su quale risorsa viene concesso l'accesso negato.


0

Per l'errore 5, ho fatto l'opposto della soluzione sopra. "Il primo errore 5: accesso negato è stato risolto assegnando le autorizzazioni alla directory di output all'account SERVIZIO DI RETE."

Ho cambiato il mio con l'account locale, invece dell'account del servizio di rete, e poiché ero connesso come amministratore ha funzionato


0

Se ricevi questo errore su una macchina server, prova a dare accesso alla cartella in cui hai il vero servizio Windows exe. Dovresti andare alla scheda sicurezza e selezionare il servizio locale come utente e dovresti dare pieno accesso. Dovresti fare lo stesso anche per l'exe.


0

Ho monitorato sppsvc.exe utilizzando Process Monitor e ho scoperto che stava cercando di scrivere nella chiave HKEY_LOCAL_MACHINE \ SYSTEM \ WPA. Dopo aver concesso le autorizzazioni al SERVIZIO DI RETE su questa chiave, sono stato in grado di avviare il servizio e Windows ha riconosciuto improvvisamente che era stato nuovamente attivato.


0

Ho impostato accidentalmente il mio servizio in modo che venga eseguito poiché la Local servicesoluzione era passare aLocal System


0

Dopo aver sbattuto la mia mano contro la scrivania per alcune ore cercando di capirlo, in qualche modo il mio metodo "Principale" si è svuotato del suo codice!

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new DMTestService()
};
ServiceBase.Run(ServicesToRun);

Altre soluzioni che ho trovato:

  • Aggiornamento del framework .NET alla 4.0
  • Assicurarsi che il nome del servizio all'interno di InitializeComponent () corrisponda alla proprietà del nome del servizio di installazione

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • E un bel riavvio del server non fa male

Szhlopp



0

Oggi ho riscontrato questo problema su un servizio che stavo sviluppando e nessuno degli altri suggerimenti su questa domanda ha funzionato. Nel mio caso, avevo una dipendenza .dll mancante nella cartella da cui è stato eseguito il servizio.

Quando ho aggiunto le dipendenze, il problema è stato risolto.


0

Nel mio caso ho mantenuto il progetto sul desktop e per accedere al desktop dobbiamo aggiungere i permessi alla cartella, quindi ho semplicemente spostato la cartella del mio progetto nella directory C: \ ora funziona come un incantesimo.


0

Non so se la mia risposta avrebbe senso per molti, ma anch'io ho affrontato lo stesso problema e la soluzione è stata scandalosamente semplice. Tutto quello che dovevo fare era aprire il programma che ho usato per eseguire il codice come amministratore. (fare clic con il tasto destro -> Esegui come amministratore).

Questo era tutto.


0

Come suggerisce il popup di errore, ciò è correlato all'autorizzazione. Quindi esegui il servizio come account "LocalSystem".

Per fare lo stesso, fare clic con il pulsante destro del mouse su serviceProcessInstaller -> Properties -> Accounte impostarlo su "LocalSystem"invece del valore predefinito "User". Installa il servizio e voilà.


Questa è una soluzione funzionante comprovata e non una soluzione alternativa. Può il votante per favore spiegare il motivo
dell'antipatia

0

controllare il registro eventi di Windows per messaggi di errore dettagliati. Ho risolto lo stesso dopo aver controllato il registro eventi.


-1

Ho riscontrato questo problema su un servizio che stavo distribuendo e nessuno degli altri suggerimenti su questa domanda ha funzionato. Nel mio caso, era perché il mio .config (xml) non era valido. Ho fatto un errore di copia e incolla durante la copia da qualif a prod.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.