Erreur 5: accès refusé lors du démarrage du service Windows

97

J'obtiens cette erreur lorsque j'essaye de démarrer un service Windows que j'ai créé en C #:

texte alternatif

Mon code jusqu'à présent:

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;
}

Mise à jour n ° 1

J'ai résolu le problème ci-dessus en accordant des autorisations au compte SERVICE RÉSEAU, mais j'ai maintenant un autre problème:

texte alternatif

Mise à jour # 2

Le service ne peut pas être démarré. System.InvalidOperationException: Le service 'RightAccessManagementWcf.RightAccessWcf' n'a aucun point de terminaison d'application (non-infrastructure). Cela peut être dû au fait qu’aucun fichier de configuration n’a été trouvé pour votre application, qu’aucun élément de service correspondant au nom de service n’a été trouvé dans le fichier de configuration, ou qu’aucun point de terminaison n’a été défini dans l’élément de service. à System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (Description de ServiceDescription) à System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (Description de ServiceDescription, ServiceHostBase serviceHost) à System.ServiceModel.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (Description de ServiceDescription, ServiceHostBase serviceHost) à System.ServiceModel.ServiceModel.Description.DispatcherBuilder. TimeSpan timeout) à System.ServiceModel.Channels.CommunicationObject.

Kris-I
la source
2
Votre deuxième problème n'est pas facile à résoudre à partir de ce seul message. Vous devrez regarder dans vos journaux d'événements et voir quelle est la véritable erreur.
Matt Ellen
1
Vérifiez si le compte système a accès au dossier.
Développeur

Réponses:

116

Je me rends compte que ce post est vieux, mais il n'y a pas de solution marquée et je voulais juste expliquer comment j'ai résolu cela.

La première Error 5: Access Deniederreur a été résolue en accordant des autorisations sur le répertoire de sortie auNETWORK SERVICE compte.

La deuxième Started and then stopped erreur semble être un message générique lorsque quelque chose a causé une faute au service. Vérifiez l'Observateur d'événements (en particulier les «Journaux Windows> Application») pour le vrai message d'erreur.

Dans mon cas, c'était un mauvais paramètre de configuration de service dans app.config.

Justin Skiles
la source
7
J'ai modifié les autorisations en accédant au dossier à l'aide de l'Explorateur, en cliquant avec le bouton droit sur Propriétés, Sécurité, puis en attribuant les autorisations appropriées au compte SERVICE RÉSEAU dans la liste des noms d'utilisateurs.
Justin Skiles
Dans mon cas à propos de "Erreur 5", c'était le service réseau qui n'a pas les droits d'accès au dossier de l'exécutable. Puisque c'est pour le développement, je ne voulais pas placer les fichiers dans le dossier Program File mais dans un dossier partagé dans lequel je pourrais copier des fichiers depuis la machine de développement. Donner au service réseau les droits de lecture / exécution / liste devrait être suffisant.
ZZZ
5
J'ajoute LOCAL SERVICE "et" NETWORK SERVICE "à mon dossier bin \ Debug et fonctionne, merci!
Hernaldo Gonzalez
3
Juste une note aux gens: si la modification des autorisations ne résout pas votre problème, assurez-vous de rechercher des erreurs dans l'Observateur d'événements. J'ai eu une erreur SQL complètement indépendante qui a empêché le service de démarrer mais m'a quand même donné le message «Erreur 5: l'accès est refusé». Erreur.
dtryan
Merci pour la note sur "Observateur d'événements" - même chose avec moi, erreur non liée "Point de terminaison introuvable" mais déguisée en "Accès refusé (5)"
David Votrubec
26

Ordinateur -> Gérer -> Service -> Propriétés de [votre service]. Ensuite, l'onglet avec les informations de compte. Jouez avec ces paramètres, comme exécuter le service avec un compte administrateur ou plus.

Cela l'a fait pour moi.

EDIT: Ce qui peut également être le problème, c'est que la plupart des services sont exécutés en tant que comptes LOCAL SERVICEou LOCAL SYSTEM. Maintenant, lorsque vous exécutez C:/my-admin-dir/service.exeavec ces comptes mais qu'ils ne sont pas autorisés à exécuter quoi que ce soit dans ce répertoire, vous obtiendrez error 5. Recherchez donc l'exécutable du service, RMB le répertoire -> Propriétés -> Sécurité et assurez-vous que le compte avec lequel le service est exécuté est dans la liste des utilisateurs qui sont autorisés à avoir un contrôle total sur l'annuaire.

Mike de Klerk
la source
21

Cela a fonctionné pour moi.

  1. Cliquez avec le bouton droit sur le dossier de niveau supérieur contenant l'exécutable du service. Aller aux propriétés
  2. Allez dans l'onglet "Sécurité"
  3. Cliquez sur "MODIFIER"
  4. Cliquez sur "AJOUTER"
  5. Entrez le nom "SYSTEM", cliquez sur OK
  6. Mettez en surbrillance Utilisateur SYSTEME et cliquez sur la case AUTORISER à côté de "Contrôle total"
  7. Cliquez deux fois sur OK
cmcginty
la source
11
"SYSTEM" n'a pas fonctionné pour moi, j'ai juste joué et essayé "SERVICE" - cela a fait l'affaire.
Extrait le
4
Ajouter "SERVICE" et lui donner "Full Control" a fonctionné pour moi - Windows 10.
Fredrik
Étant donné que la propriété Account de mon ServiceProcessInstaller (dans mon ProjectInstaller) a été définie sur LocalService, j'ai accordé des autorisations complètes au compte de service local et cela a fait l'affaire!
Dave le
14

J'ai également eu la même erreur, elle a été résolue par un clic droit sur Service> Propriétés> Ouvrir une session> Connectez-vous en tant que: Compte système local.

Asmita Chavan
la source
Merci. J'ai eu un problème avec tor.exe --service start, et maintenant cela fonctionne comme un charme!
Arman Karimi
A travaillé pour moi. Cependant, est-il possible de spécifier cela par programme?
Sisir
Je l'ai. Cliquez avec le bouton droit sur serviceProcessInstaller -> Propriétés -> Compte et réglez-le sur "LocalSystem" au lieu de "User" par défaut. Installez le service et le tour est joué.
Sisir
10

Assurez-vous que les Path to executablepoints vers un exécutable réel (Service de clic droit -> Propriétés -> onglet Général). Via powershell (et sc.exe), vous pouvez installer un service sans pointer vers un exécutable réel ... ahem.

Aage
la source
J'ai accidentellement laissé là un dossier au lieu d'un fichier .exe. Pour résoudre ce problème, j'ai dû "sc delete servicenameXYZ" + redémarrer le serveur pour supprimer complètement le service et réinstaller le fichier .exe du service correct. Puis ça commence comme un charme. Merci pour ce post.
Honza P.
Tu m'as sauvé! Attribution d'un dossier, au lieu du chemin complet de l'exécutable ... Arghhhh! J'aurais dû mieux
paraître
9

J'ai la solution:

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"

maintenant vous pouvez essayer de démarrer le service.

John
la source
1
J'ai déjà sélectionné "Compte système local" et je reçois toujours le message.
user2568374
5

J'obtenais cette erreur parce que j'avais mal lu la réponse acceptée d'ici: Créer un service Windows à partir de l'exécutable .

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

Pour <path_to_service_executable>, j'utilisais le chemin du dossier de l'exécutable, par exemple C:\Folder.

Il doit s'agir du chemin de l'exécutable , par exemple C:\Folder\Executable.exe.

Jamie Butterworth
la source
4

Dans mon cas, le suivi n'a pas été vérifié.

entrez la description de l'image ici

Akshay Anand
la source
2
Pour les autres lecteurs comme moi: cette capture d'écran fait partie de la fenêtre des propriétés du service! Ouvrez la fenêtre Services (Exécuter: services.msc) et sélectionnez Propriétés dans le menu contextuel qui apparaît après un clic droit sur le service!
MohaMad du
3

Pour moi - le dossier à partir duquel le service devait s'exécuter, et les fichiers qu'il contient, ont été cryptés à l'aide de l'option "Crypter" de Windows. Enlever cela et - voila!

Nicholas Blumhardt
la source
Cela s'est avéré être le problème pour moi - les administrateurs système clowns sur le serveur que j'utilisais avaient tourné un bouton pour que tous les répertoires aient un cryptage NTFS par défaut, et donc LocalSystem n'a pas réellement la clé de cryptage pour les lire ...
KJ Tsanaktsidis
3

Cette erreur se produit lorsqu'il y a une erreur dans votre OnStartméthode. Vous ne pouvez pas ouvrir un hôte directement dans la OnStartméthode car il ne s'ouvrira pas réellement lorsqu'il sera appelé, mais à la place il attendra le contrôle. Vous devez donc utiliser un fil. Ceci est mon exemple.

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();
    }
}
santhosh
la source
3

si vous avez un code d'erreur d'accès refusé 5. alors probablement dans votre code, votre service essaie d'interagir avec certains fichiers du système comme l'écriture dans un fichier journal

ouvrez l' log ononglet de sélection des propriétés des services et cochez l'option pour permettre au service d'interagir avec le bureau, cliquez sur autoriser le service à interagir avec le bureau

kudzai zishumba
la source
3

Dans mon cas, j'ai dû ajouter «Utilisateurs authentifiés» dans la liste des «Noms de groupe ou d'utilisateur» dans le dossier où l'exécutable était installé.

Sankar
la source
3

L'une des causes de cette erreur est des autorisations insuffisantes (utilisateurs authentifiés) dans votre dossier local. Pour autoriser les «Utilisateurs authentifiés» Ouvrez l'onglet de sécurité dans les propriétés de votre dossier, modifiez et ajoutez le groupe «Utilisateurs authentifiés» et appliquez les modifications.

Une fois que cela a été fait, j'ai pu exécuter des services même via un compte de service réseau (avant cela, je ne pouvais fonctionner qu'avec un compte système local).

Vijay kumar.S
la source
2

J'ai eu le service Windows hébergé en utilisant OWIN et TopShelf. Je n'ai pas pu le démarrer. Même erreur - "Accès refusé 5"

J'ai fini par donner toutes les permanentes à mon bin / Debug.

Le problème n'était toujours pas résolu.

J'ai donc jeté un coup d'œil dans les journaux d'événements et il s'est avéré que le Microsoft.Owin.Host.HttpListenern'était pas inclus dans la bibliothèque de classes contenant la classe de démarrage OWIN.

Assurez-vous donc de vérifier le journal des événements pour identifier la cause première avant de commencer à entrer dans les permanentes, etc.

Utilisateur SO
la source
2
Bon point - l'erreur «accès refusé» peut n'avoir rien à voir avec les autorisations; vérifiez toujours le journal des applications dans l'Observateur d'événements.
mhenry1384
salut, je vérifie également à ce sujet, où se trouve le chemin `. \ logs` que je me connecte à partir de topshelf mais ce n'est pas là
transformateur
1

Votre code peut s'exécuter dans le contexte de sécurité d'un utilisateur qui n'est pas autorisé à démarrer un service.

Puisque vous utilisez WCF, je suppose que vous êtes dans le contexte du SERVICE RÉSEAU.

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

Shiraz Bhaiji
la source
1
J'ai donné les droits «SERVICE LOCAL» et «SERVICE RÉSEAU» sur mes répertoires de sortie
Kris-I
Vous devez également définir la stratégie de groupe pour les services système, support.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji
1

Utilisez le compte LocalSystem au lieu du compte LocalService dans Service Installer.

Vous pouvez le faire soit en modifiant la vue de conception de votre programme d'installation de service ci-dessous:
Propriétés de Service Process Installer -> Définir le compte sur LocalSystem.

ou en faisant ci-dessous le changement dans le fichier designer.cs de votre programme d'installation de service:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Jay Shah
la source
1

Cliquez avec le bouton droit sur le servicedans service.msc et sélectionnez property.

Vous verrez un chemin de dossier sous Path to executablecomme C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Accédez à C: \ Users \ Me \ Desktop \ project \ Tor et faites un clic droit sur Tor.

Sélectionnez property, security, editpuis add. Dans le champ de texte entrez LOCAL SERVICE, cliquez sur ok puis cochez la caseFULL CONTROL

Cliquez à addnouveau sur puis entrez NETWORK SERVICE, cliquez ok, cochez la caseFULL CONTROL

Cliquez ensuite sur ok (en bas)

MagTun
la source
0

Jetez un oeil à Process Utilities > Process monitorpartir http://www.sysinternals.com .

C'est un outil qui vous permet de surveiller ce que fait un processus. Si vous surveillez ce processus de service, vous devriez voir un accès refusé quelque part et sur quelle ressource l'accès refusé est donné.

Pieter van Ginkel
la source
0

Pour l'erreur 5, j'ai fait le contraire de la solution ci-dessus. "La première erreur 5: erreur d'accès refusé a été résolue en accordant des autorisations au répertoire de sortie au compte SERVICE RÉSEAU."

J'ai changé le mien en compte local, au lieu du compte de service réseau, et parce que j'étais connecté en tant qu'administrateur, cela a fonctionné

Chris
la source
0

Si vous obtenez cette erreur sur une machine serveur, essayez de donner accès au dossier dans lequel vous avez obtenu le véritable exe du service Windows. Vous devez aller dans l'onglet sécurité et sélectionner le service local en tant qu'utilisateur et donner un accès complet. Vous devriez faire de même pour l'exe aussi.

Darshana
la source
0

J'ai surveillé sppsvc.exe en utilisant le moniteur de processus et j'ai découvert qu'il essayait d'écrire sur la clé HKEY_LOCAL_MACHINE \ SYSTEM \ WPA. Après avoir donné les autorisations au SERVICE RÉSEAU sur cette clé, j'ai pu démarrer le service et Windows a soudainement reconnu qu'il était à nouveau activé.

Guilherme Noronha
la source
0

J'ai accidentellement configuré mon service pour qu'il s'exécute car la Local servicesolution consistait à passer àLocal System

meda
la source
0

Après m'être cogné contre mon bureau pendant quelques heures à essayer de comprendre cela, ma méthode "Main" s'est vidée de son code!

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

Autres solutions que j'ai trouvées:

  • Mise à jour du framework .NET vers 4.0
  • S'assurer que le nom du service dans InitializeComponent () correspond à la propriété du nom du service du programme d'installation

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • Et un bon redémarrage du serveur ne fait pas de mal

Szhlopp

Szhlopp
la source
0

Dans certains cas, le système manque d'espace libre sur le disque local.

Alexandre Puchkov
la source
0

J'ai eu ce problème aujourd'hui sur un service que je développais, et aucune des autres suggestions sur cette question n'a fonctionné. Dans mon cas, j'avais une dépendance .dll manquante dans le dossier d'où le service s'exécutait.

Lorsque j'ai ajouté les dépendances, le problème a disparu.

Frank Bryce
la source
0

Dans mon cas, j'ai gardé le projet sur le bureau et pour accéder au bureau, nous devons ajouter une autorisation au dossier.J'ai donc simplement déplacé mon dossier de projet vers le répertoire C: \ maintenant cela fonctionne comme un charme.

Ali786
la source
0

Je ne sais pas si ma réponse aurait du sens pour beaucoup, mais moi aussi j'étais confronté au même problème et la solution était scandaleusement simple. Tout ce que j'avais à faire était d'ouvrir le programme que j'avais utilisé pour exécuter le code en tant qu'administrateur. (clic droit -> Exécuter en tant qu'administrateur).

C'était tout.

Rai
la source
0

Comme le suggère la fenêtre contextuelle d'erreur, cela est lié à l'autorisation. Exécutez donc le service en tant que compte "LocalSystem".

Pour faire de même, faites un clic droit sur serviceProcessInstaller -> Properties -> Accountet réglez-le sur au "LocalSystem"lieu de la valeur par défaut "User". Installez le service et le tour est joué.

Sisir
la source
Il s'agit d'un correctif de travail éprouvé et non d'une solution de contournement. L'électeur à la baisse peut-il expliquer la raison de l'aversion pour les autres à comprendre
Sisir
0

consultez le journal des événements Windows pour un message d'erreur détaillé. J'ai résolu la même chose après avoir vérifié le journal des événements.

Amrik Singh
la source
-1

J'ai eu ce problème sur un service que je déployais, et aucune des autres suggestions sur cette question n'a fonctionné. Dans mon cas, c'était parce que mon .config (xml) n'était pas valide. J'ai fait une erreur de copier-coller lors de la copie de qualif vers prod.

SabineA
la source