C#.NET Getting User Name of machine using Windows Service

前端 未结 3 1504

I am having difficulty getting the User Name of a person logged into a machine using a windows service.

When using both System.Environment.UserName or WindowsIdentity.Ge

相关标签:
3条回答
  • 2021-01-21 04:18

    Windows service always runs under the credential supplied in the service Properties / Log On tab. This has nothing to do with the credentials of the person / people that are currently logged into Windows in their own sessions.

    The value of NTAUTHORITY\SYSTEM is correct because your service is running under 'Local System account' credentials.

    You cannot run windows service under the account of 'currently logged on' user - that's not what windows service is for.

    0 讨论(0)
  • 2021-01-21 04:21

    For XP only, this advice should apply: Get Window Station for a non-interactive user per process, user or session?

    • Call OpenWindowStation to get a handle to "winsta0"
    • Call GetUserObjectInformation to find out who owns winsta0

    However, this approach will break when you upgrade your app to Vista, Windows 7 or above, where services run in a different session from interactive logons. You'll need to call the terminal services API to get a list of logged on users, and pick your 'interactive' one.

    0 讨论(0)
  • 2021-01-21 04:22

    Try this:

    var connectionOptions = new ConnectionOptions();
    var scope = new System.Management.ManagementScope("\\\\localhost", connectionOptions);
    var query = new System.Management.ObjectQuery("select * from Win32_ComputerSystem");
    var searcher = new ManagementObjectSearcher(scope, query);
    foreach (var row in searcher.Get()) 
    {
        Console.WriteLine(row["UserName"].ToString().ToLower());
    }
    
    0 讨论(0)
提交回复
热议问题