53 votes

Erreur système 5 L'accès est refusé lors du démarrage d'un service .NET

Lorsque j'essaie de démarrer un service que j'ai créé dans Visual Studio, je reçois l'erreur suivante :

System error 5 has occurred.

Access is denied.

J'exécute la ligne de commande avec des privilèges élevés, ce n'est donc pas ce problème. Y a-t-il un endroit où je peux regarder pour voir quelle erreur se produit ?

49voto

Daniel O Points 1776

Pour que cela fonctionne, j'ai dû ajouter des permissions au bac de sortie. \debug pour mon projet de service.

Le compte de service local n'avait pas les droits sur le fichier .exe de sortie et c'est pourquoi l'erreur s'est produite.

1 votes

C'est vraiment stupide. J'ai simplement lancé l'installation à partir du dossier de débogage, ce qui, je pensais, placerait l'exécutable dans le bon répertoire. Les permissions ont fait l'affaire.

0 votes

Ça a marché pour moi aussi - merci. Je voulais juste l'essayer et installer à partir d'un dossier Debug était l'option la plus facile :-)

1 votes

C'est une bonne chose que vous ayez posté cette réponse alors que vous avez trouvé la solution vous-même. J'avais le même problème et cela m'a aidé. Merci :-D

18voto

alga Points 650

J'ai eu le même problème.

Réparé en exécutant le service sous "Compte système local".

enter image description here

13voto

hfrmobile Points 422

Dans mon cas, la solution était même aussi simple : Exécuter l'invite de commande en tant que administrateur .

2 votes

Mais si vous essayez de planifier votre service par le biais de la planification des tâches, cette solution ne fonctionnera pas.

10voto

Marc Gravell Points 482669

Je vois que vous avez résolu le problème ; mais en réalité, vous ne devriez normalement pas exécuter le service à partir du dossier bin d'un projet de toute façon - les fichiers devraient être placés quelque part indépendamment du projet et du profil (par exemple, sous les fichiers de programme). À des fins de débogage (lorsqu'il se être dans le dossier bin), vous pouvez détecter si c'est un service en Main() et s'il est exécuté de manière interactive, il suffit d'exécuter le code de service directement, au lieu de la configuration habituelle de démarrage de service.

Vous pouvez le détecter en ajoutant un argument de ligne de commande, ou vous pouvez essayez vérification de Environment.UserInteractive .

0 votes

Oui, dans mon scénario, j'étais dans DEV, et un événement post-build déploie et démarre le service pour moi, prêt à être attaché.

1 votes

C'est vrai, mais il est également important de déboguer le service exécuté en tant qu'utilisateur du service local, sinon vous risquez de rencontrer des problèmes de permissions inattendus lors de l'exécution en production.

0 votes

La suggestion de Marc est la bonne façon de procéder :) Si vous voulez simplement passer outre l'erreur, alors voyez la réponse acceptée

1voto

exton Points 61

J'ai eu le même problème parce que mon projet et son code source se trouvaient dans un dossier qui avait le système de fichiers cryptés de NTFS ( EFS ) activé. Les assemblages compilés étaient également cryptés et l'utilisateur qui exécutait mon service n'avait pas le droit de les décrypter. La suppression d'EFS était la solution la plus simple. Cela peut être fait par ligne de commande en utilisant CIPHER.EXE, qui est un outil Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X