从以本地系统帐户启动的程序获取当前用户名

我的程序是从在Local System Account (真实用户login)下运行的服务启动的。 该程序的任务之一是存储文件在networkingpath,其中应包含当前的用户名,例如\\server\\storage\\%username% ,但问题是,我得到的系统帐户的名称,而不是用户帐户,当我读取环境variables:

 Environment.GetEnvironmentVariable("username"); 

有没有办法在这种情况下获得正确的用户名?

Solutions Collecting From Web of "从以本地系统帐户启动的程序获取当前用户名"

我的解决方案是找出哪个用户启动了浏览器进程:

只有在引用.NET System.Management库时才能工作

 private static string GetExplorerUser() { var process = Process.GetProcessesByName("explorer"); return process.Length > 0 ? GetUsernameByPid(process[0].Id) : "Unknown-User"; } private static string GetUsernameByPid(int pid) { var query = new ObjectQuery("SELECT * from Win32_Process " + " WHERE ProcessID = '" + pid + "'"); var searcher = new ManagementObjectSearcher(query); if (searcher.Get().Count == 0) return "Unknown-User"; foreach (ManagementObject obj in searcher.Get()) { var owner = new String[2]; obj.InvokeMethod("GetOwner", owner); return owner[0] ?? "Unknown-User"; } return "Unknown-User"; } 

另一种可能性是解析qwinsta命令的输出。

如果您没有采取任何措施以不同的用户身份启动程序(CreateProcessAsUser等),那么它将以与调用程序相同的用户身份运行。