检索启动流程的实际用户帐户

时间:2018-09-21 18:22:18

标签: c#

我正在尝试检索已启动进程的用户帐户。到目前为止,我还没有找到任何检索信息的答案。它们都返回用户名的string,而不是帐户。我已经尝试了WMI和Diagnostic,但都得到了相同的结果,结果是正确的一半。

假设我两次启动记事本。

  • 第一个我用帐户\ MyDomain \ Franck
  • 打开它
  • 第二次,我使用以下帐户打开帐户:\ MyComputer \ Franck

然后使用WMI或Diagnostics都返回用户名“ Franck”,而我无法知道它是在本地用户还是域下运行。

一种方法可能是使用诊断程序

var procs = Process.GetProcessesByName("Notepad").ToList();
var notepad1 = procs[0].StartInfo.Environment["Username"];
var notepad2 = procs[1].StartInfo.Environment["Username"];

两者都返回Franck,但是一个是域帐户,另一个是本地帐户。

2 个答案:

答案 0 :(得分:1)

如果您想要包含用户帐户的域的名称,那么您正在寻找UserDomain Environment Variable

如果您希望哪个域控制器对客户端的登录请求进行身份验证,那么您正在寻找LogonServer Environment Variable

var procs = Process.GetProcessesByName("Notepad").
var userDomain = procs[0].StartInfo.Environment["UserDomain"];
var logonServer = procs[0].StartInfo.Environment["LogonServer"];

我的Windows计算机(本地用户)上的值:

userDomain: "LAPTOP-DDK137L8"
logonServer: "\\LAPTOP-DDK137L8"

因此,您应该可以确定它是在本地用户还是域下运行。

答案 1 :(得分:1)

tasklist /v提供您感兴趣的相关信息,即带有域名的用户名。

official文档未显示任何示例输出。

  

任务列表

     

显示本地计算机或远程计算机上当前正在运行的进程的列表。

     

/ v在输出中显示详细的任务信息。

您可以将其与/fo csv选项一起使用以获取结果并对其进行解析。

SuperUser的answer的屏幕截图显示了输出。

您可以将此命令作为与您的应用程序类似的独立进程来运行,类似于this,但要传递其他parameters