2010-09-20 3 views
3

J'ai écrit un programme d'installation qui installe un service Windows (A) qui doit démarrer/arrêter un autre service (B). Toutefois, lorsque A tente de démarrer/arrêter B, j'obtiens cette exception:Comment installer un service Windows qui s'exécute en tant qu'administrateur?

System.InvalidOperationException: Impossible d'ouvrir le service MyService sur l'ordinateur '.'. ---> System.ComponentModel.Win32Exception: Accès refusé

Le programme d'installation installe le service en tant que service local et demande des droits d'administrateur via la fenêtre contextuelle UAC, que j'accorde. J'ai aussi ajouté un fichier app.manifest au service qui est configuré pour demander des droits d'admin:

Pourtant, je suis toujours obtenir cette erreur.

Voilà comment je commence le service (arrêt est le même, sauf qu'il appelle Stop, bien sûr):

using (Mutex mutex = new Mutex(false, "MyServiceLock")) 
{ 
    mutex.WaitOne(); 

    if (ServiceExists(serviceName) == true) 
    { 
     using (ServiceController serviceController = new ServiceController(serviceName, ".")) 
     { 
      serviceController.Start(); // this line throws the exception 
     } 
    } 

    mutex.ReleaseMutex(); 
} 

Pourquoi pourrait accéder à ce service se voir refuser?

+0

Pourriez-vous, s'il-vous-plaît, la mise à jour de la question pour trouver les réponses acceptées? Personnellement, j'aimerais voir comment je peux installer un service pour fonctionner en tant qu'administrateur. – tishma

Répondre

7

Un service ne peut pas demander une élévation de l'UAC. Il me semble que l'invite UAC que vous décrivez est en fait demandée par l'installateur, pas le service. Les services fonctionnent normalement avec un compte très privilégié, LocalSystem par défaut. Assurez-vous que vous configurez le service pour utiliser un tel compte privilégié, pas un compte d'utilisateur restreint.

+1

L'installation en tant que LocalSystem (par opposition à LocalService) a fait l'affaire. Merci! –

1

En guise de test rapide, si vous ouvrez services.msc et que vous vérifiez que votre serveur s'exécute sous et que vous entrez vos informations d'identification, l'erreur disparaît-elle? Il se peut que LocalService n'ait pas accès à d'autres services. Fournir l'autorisation d'invite de l'UAC ne vous permet probablement que d'installer le service en premier lieu, sans lui indiquer de s'exécuter en tant qu'administrateur.

+0

Le problème semble disparaître. Alors, comment puis-je faire fonctionner ce service en tant qu'administrateur? Je ne vais pas connaître les informations d'identification d'administrateur appropriées. –

Questions connexes