Comment puis-je récupérer le nom d'utilisateur d'un service Windows est en cours d'exécution en vertu de l'?
Donné un nom de service, je voudrais récupérer le nom d'utilisateur qu'il s'exécute sous (c'est à dire le nom d'utilisateur indiqué dans l'onglet 'connexion' d'un service à la fenêtre des propriétés de l'). Il ne semble pas être quelque chose dans le ServiceController
classe pour récupérer cette information de base. Rien d'autre dans System.ServiceProcess
dirait qu'il expose cette information soit. Est-il une solution à cela, ou vais-je avoir à descendre dans quelque chose de plus bas-niveau?
OriginalL'auteur Mark Carpenter | 2010-06-29
Vous devez vous connecter pour publier un commentaire.
À l'aide de WMI, avec le Système.Vous pouvez essayer le code suivant:
Vous pourrez ensuite remplacer le code commenté avec votre nom de service, et il doit renvoyer uniquement les instances de votre service de processus qui est en cours d'exécution.
OriginalL'auteur Riaan
WMI est votre ami. Regardez Win32_Service, plus précisément le
StartName
de la propriété. Vous pouvez accéder à WMI à partir de C# via le Système.De la gestion.ManagementClass.Si vous n'avez pas utilisé WMI avant, cette article semble être un très bon tutoriel.
OriginalL'auteur Hans Olsson
Essayez ceci:
mais la plus évidente, vous obtiendrez SYSTÈME LOCAL ou RÉSEAU. La raison que vous ne pouvez pas montrer à l'utilisateur que le service peut gérer plusieurs utilisateurs (partagée par le bureau, attaché à la session windows en cours, de l'utilisation partagée des ressources ...)
Système démarre service, mais n'importe quel utilisateur peut l'utiliser.
-1 renvoie le
WindowsIdentity
de l'utilisateur courant, pas d'un service déterminé.comme d'habitude le service est démarré à partir du SYSTÈME ou des informations d'identification RÉSEAU n'est pas "connecté" aux utilisateurs. Voir mes modifications à ce sujet. Afin de clarifier que vous souhaitez obtenir compte système qui démarre service (ma réponse est correcte à ce sujet) ou connecté dans la liste des utilisateurs, qui pourraient utiliser ce service?
services exécuter en tant que Système Local ou un Réseau de Service, mais vous pouvez installer un service pour s'exécuter sous un compte d'utilisateur standard (ce que nous faisons dans le projet, je travaille sur).
Je ne suis pas sûr de comprendre ce que je suis en train de faire: je voudrais obtenir le nom d'utilisateur d'un service en particulier est en cours d'exécution en vertu de l'. Je voudrais le faire à partir d'un tout autre client de l'application (c'est à dire tout le code pour récupérer le nom d'utilisateur dans le client). Votre suggestion à l'utilisateur
GetCurrent()
ne fonctionnera pas parce que, selon la MSDN, il "Retourne un objet WindowsIdentity qui représente l'utilisateur Windows actuel." Dans ce cas, il sera le WindowsIdentity de l'utilisateur Windows actuel de l'exécution de l'application CLIENT, pas le WindowsIdentity du SERVICE.OriginalL'auteur Dewfy
Cette solution fonctionne bien pour moi:
OriginalL'auteur Ben
OriginalL'auteur Abhishek Chauhan