如何检索运行Windows服务的用户名?

Mar*_*ter 16 c# windows-services username

给定一个服务名称,我想检索它运行的用户名(即服务属性窗口的"登录"选项卡中显示的用户名).类中似乎没有任何东西ServiceController可以检索这些基本信息.其他任何东西System.ServiceProcess看起来都不会暴露这些信息.有没有一个托管解决方案,或者我将不得不降低到更低级别的东西?

Ria*_*aan 22

使用WMI,使用System.Management,您可以尝试以下代码:

using System;
namespace WindowsServiceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Management.SelectQuery sQuery = new System.Management.SelectQuery(string.Format("select name, startname from Win32_Service")); // where name = '{0}'", "MCShield.exe"));
            using (System.Management.ManagementObjectSearcher mgmtSearcher  = new System.Management.ManagementObjectSearcher(sQuery))
            {
                foreach (System.Management.ManagementObject service in mgmtSearcher.Get())
                {
                    string servicelogondetails =
                        string.Format("Name: {0} ,  Logon : {1} ", service["Name"].ToString(), service["startname"]).ToString();
                    Console.WriteLine(servicelogondetails);
                }
            }
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用您的服务名称替换注释代码,并且它应该只返回正在运行的服务进程的实例.


Han*_*son 6

WMI是你的朋友.查看Win32_Service,特别是StartName属性.您可以通过System.Management.ManagementClass从C#访问WMI .

如果你还没有使用过WMI,文章似乎是相当不错的教程.