我正在尝试检索已启动进程的用户帐户。到目前为止,我还没有找到任何检索好信息的答案。它们都返回用户名的string
,而不是帐户。我已经尝试了WMI和Diagnostic,但都得到了相同的结果,结果是正确的一半。
假设我两次启动记事本。
然后使用WMI或Diagnostics都返回用户名“ Franck”,而我无法知道它是在本地用户还是域下运行。
一种方法可能是使用诊断程序
var procs = Process.GetProcessesByName("Notepad").ToList();
var notepad1 = procs[0].StartInfo.Environment["Username"];
var notepad2 = procs[1].StartInfo.Environment["Username"];
两者都返回Franck
,但是一个是域帐户,另一个是本地帐户。
答案 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。