web-dev-qa-db-fra.com

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

Je reçois cette erreur lorsque j'essaie de démarrer un service Windows que j'ai créé en C #:

alt text

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 # 1

J'ai résolu le problème ci-dessus en accordant des autorisations sur le compte NETWORK SERVICE mais j'ai un autre problème:

alt text

Mise à jour # 2

Le service ne peut pas être démarré. System.InvalidOperationException: le service 'RightAccessManagementWcf.RightAccessWcf' n'a aucun noeud final d'application (non-infrastructure). Cela peut être dû au fait qu'aucun fichier de configuration n'a été trouvé pour votre application, ou qu'aucun élément de service correspondant au nom de service n'a été trouvé dans le fichier de configuration, ou qu'aucun noeud final n'a été défini dans l'élément de service . sur System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (description de ServiceDescription) sur System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (description ServiceDescription, ServiceHostBase serviceHost) à l'adresse System.ServiceModel.ServiceHostBase.InitializeRuntime () à System.ServiceModel.ServiceHostBase.OnOpen (délai d'attente TimeSpan) à System.ServiceModel.Channels.CommunicationObject.Open (délai d'attente TimeSpan) at RightAccessHosting.RightAccessHost.OnStart (String [] args) dans C:\Utilisateurs ....

85
Kris-I

Je réalise que cet article est vieux, mais il n'y a pas de solution marquée et je voulais juste expliquer comment j'ai résolu ce problème.

La première erreur Error 5: Access Denied a été résolue en donnant des autorisations sur le répertoire de sortie au compte NETWORK SERVICE.

La deuxième erreur Started and then stopped semble être un message générique lorsqu'un problème est survenu dans le service. Consultez l'observateur d'événements (en particulier "Journaux Windows> Application") pour connaître le vrai message d'erreur.

Dans mon cas, il s'agissait d'un paramètre de configuration de service incorrect dans app.config.

107
Justin Skiles

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

Cela l'a fait pour moi.

EDIT: Ce qui peut également être le problème est que, la plupart des services sont exécutés en tant que comptes LOCAL SERVICE ou LOCAL SYSTEM. Maintenant, lorsque vous exécutez C:/my-admin-dir/service.exe avec ces comptes mais qu'ils ne sont pas autorisés à exécuter quoi que ce soit dans ce répertoire, vous obtenez 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é figure dans la liste des utilisateurs qui sont autorisés à exercer un contrôle total sur le répertoire.

23
Mike de Klerk

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. Aller sur l'onglet "Sécurité"
  3. Cliquez sur "EDIT"
  4. Cliquez sur "Ajouter"
  5. Entrez le nom "SYSTEM", cliquez sur OK
  6. Mettez en surbrillance l'utilisateur SYSTEM et cochez la case ALLOW, à côté de "Full control"
  7. Cliquez deux fois sur OK
15
cmcginty

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

10
Asmita Chavan

Assurez-vous que le Path to executable pointe sur un exécutable réel (Service du 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 ... ahem.

8
cr4ne

J'ai eu 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. 

4
John

Cette erreur se produit lorsqu'il y a une erreur dans votre méthode OnStart. Vous ne pouvez pas ouvrir un hôte directement dans la méthode OnStart car il ne s’ouvrira pas réellement lorsqu’il sera appelé, mais il attendra le contrôle. Donc, vous devez 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();
    }
}
3
santhosh

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

ouvrez les propriétés des services, sélectionnez l’onglet log on et cochez l’option pour permettre au service d’interagir avec le bureau, click allow service to interact with desktop

3
kudzai zishumba

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

 enter image description here

3
Akshay Anand

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 Windows "Encrypt". Enlever ça et - le tour est joué!

2
Nicholas Blumhardt

L'une des causes de cette erreur est l'absence d'autorisations (utilisateurs authentifiés) dans votre dossier local . Pour autoriser les utilisateurs authentifiés Ouvrez l'onglet Sécurité dans les propriétés de votre dossier, puis modifiez et ajoutez des "Utilisateurs authentifiés". grouper et appliquer les modifications.

Une fois cela fait, je pouvais exécuter des services même via un compte de service réseau (auparavant, je ne pouvais que fonctionner avec un compte système local).

1
Vijay kumar.S

J'avais un service Windows hébergé avec 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 à ma corbeille/Debug.

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

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

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

1
Rashmi Pandit

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

Vous pouvez le faire soit en effectuant la modification ci-dessous dans la vue Conception de votre installateur de services:
Propriétés de Service Process Installer -> Définir le compte sur LocalSystem .

.__ ou en effectuant les modifications ci-dessous dans le fichier designer.cs de votre installateur de service:

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

Votre code est peut-être en cours d'exécution 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 de NETWORK SERVICE.

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

1
Shiraz Bhaiji

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

Vous verrez un chemin de dossier sous Path to executable comme C:\Utilisateurs\Me\Bureau\projet\Tor\Tor\tor.exe

Accédez à C:\Utilisateurs\Me\Bureau\projet\Tor et cliquez avec le bouton droit sur Tor. 

Sélectionnez property, security, edit puis add. Dans le champ de saisie, saisissez LOCAL SERVICE, cliquez sur ok puis cochez la case FULL CONTROL.

Cliquez à nouveau sur add puis entrez NETWORK SERVICE, cliquez sur ok, cochez la case FULL CONTROL.

Puis cliquez sur ok (en bas)

1
MagTun

Dans mon cas, je devais ajouter "Utilisateurs authentifiés" dans la liste des "Noms de groupe ou d'utilisateur" du dossier où l'exécutable était installé.

1
Sankar

Après avoir frappé mon bureau pendant quelques heures pour essayer de résoudre ce problème, 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

0
Szhlopp

J'ai surveillé sppsvc.exe à l'aide du moniteur de processus et découvert qu'il essayait d'écrire sur la clé HKEY_LOCAL_MACHINE\SYSTEM\WPA. Après avoir donné des autorisations à NETWORK SERVICE sur cette clé, j'ai pu démarrer le service et Windows a soudainement reconnu qu'il était à nouveau activé.

0
Guilherme Noronha

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

0
Ali786

J'ai eu cette question aujourd'hui sur un service que je développais, et aucune des autres suggestions sur cette question n'a fonctionné. Dans mon cas, il me manquait une dépendance .dll dans le dossier où le service était exécuté.

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

0
Frank Bryce

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 du compte NETWORK SERVICE."

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

0
Chris

Regardez Process Utilities > Process monitor depuis http://www.sysinternals.com .

C'est un outil qui vous permet de surveiller le fonctionnement d'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 est refusé.

0
Pieter van Ginkel

Si vous obtenez cette erreur sur un serveur, essayez de donner accès au dossier qui contient le vrai service Windows. Vous devez accéder à l'onglet Sécurité et sélectionner le service local en tant qu'utilisateur et vous devez donner un accès complet. Vous devriez faire la même chose pour l'exe aussi.

0
Darshana

J'avais cette erreur parce que j'ai mal interprété la réponse acceptée: Créer un service Windows à partir d'un 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.

J'espère que cela aidera quelqu'un qui a commis la même erreur stupide que moi.

0
Jamie Butterworth

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

C'était tout.

0
Rai

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

0
Alexander Puchkov

J'ai accidentellement configuré mon service pour qu'il s'exécute en tant que Local service, la solution a été de passer à Local System

0
meda

Comme l'indique le message d'erreur, cela est lié à la permission. Donc, exécutez le service en tant que compte "LocalSystem".

Pour faire la même chose, faites un clic droit sur serviceProcessInstaller -> Properties -> Account et réglez-le sur "LocalSystem" au lieu du paramètre par défaut "User". Installez le service et le tour est joué.

0
Sisir