2009-09-22 4 views
2

Je suis en train d'accéder à un service Windows (également créé par moi) à travers une application WinForms utilisant ServiceController:.net ServiceController - Impossible d'ouvrir le service "nom de service" dans la machine '.'

service = new System.ServiceProcess.ServiceController("MyService") 

Le service retourne OK et je peux voir l'état via myservice.Status.

Mais quand je tente de démarrer (ou arrêter), il renvoie l'erreur:

Unable to open service MyService in machine '.'

Je suis administrateur et le processus de service est en cours d'exécution en tant que NetworkService.

Je suis nouveau dans les applications .net et windows et je n'arrive pas à le déboguer davantage.

Répondre

2

J'ai finalement été en mesure de contourner le problème en réglant le niveau d'exécution dans le app.manifest (Projet-> nouvelle application item-> manifeste)

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Maintenant, l'application de contrôle nécessite les droits d'administrateur et donc peut démarrer/arrêter le service sans problème. Pourtant, je crois que je peux le faire d'une autre manière en usurpant l'identité via le code ou peut-être en quelque sorte abaisser le niveau d'exécution du service. Avant de lancer l'application, je devrai passer en revue ceci et je posterai mes résultats ici alors.

Merci à Drew pour le guidage tout au long du débogage.

Cordialement

1

Etes-vous sûr d'utiliser le service nom et non le afficher nom?

Vérifiez que vous êtes un administrateur local sur la boîte.

Le service s'exécute-t-il sur la machine locale? Je ne sais pas pourquoi vous voyez le nom d'hôte '.'

EDIT:

Je lis en ligne que le code suivant renvoie une InvalidOperationException si Test Service est pas un service valide nom:

var sc = new ServiceController("Unknown Service"); 
string name = sc.DisplayName; 

Le documentation for this constructor n'indique pas qu'il jetterait une exception , donc je suppose que vous aurez besoin d'utiliser le nom du service. Toute exception que vous voyez après qui est en fait une vraie erreur.

Espérons que ce soit plus clair.

+0

Je pense que j'utilise le bon, c'est "MySMS Service". Les erreurs ServiceName in Service ("MySMS_Service") sur service.Status donc j'ai pensé "MySMS Service" était correct parce que le statut "Stopped" est retourné. Oui, mon compte d'utilisateur a des droits d'administrateur. Oui, le service est en cours d'exécution sur la machine locale, je n'ai pas défini la propriété MachineName, donc elle doit être définie par défaut sur la machine locale. –

+0

J'ai mis à jour la réponse. Je crois que vous devez utiliser le nom du service, pas le nom d'affichage. –

+0

ok, pour être sûr que j'ai utilisé ServiceController.GetServices() et passé par tous les services - le serviceName est en effet "MySMS Service". - Je peux Statut et obtenir DisplayName, etc de celui-ci - mais seulement quand j'essaie de démarrer ou d'arrêter, il retourne "Impossible d'ouvrir le service MySMS Service dans la machine". '. " –

Questions connexes