C# 获取登录的用户名以使用激活进程
我正在使用C#和.NET3.5 我的目标是使用登录的用户名,并简单地在此用户名下启动一个进程。通常一个简单的C# 获取登录的用户名以使用激活进程,c#,process,process.start,C#,Process,Process.start,我正在使用C#和.NET3.5 我的目标是使用登录的用户名,并简单地在此用户名下启动一个进程。通常一个简单的进程.Start(pathToProgram)在这里会有所帮助,但问题是我是从安装程序类调用这一行的,这意味着msiexec当前正在工作,我得到的用户名是SYSTEM,而不是当前登录到windows的实际用户 当然,Environment.UserName也会返回“SYSTEM”,而不是登录用户 如何以登录用户而不是用户系统的身份启动进程?您可以像这样获取当前登录用户的用户名- strin
进程.Start(pathToProgram)
在这里会有所帮助,但问题是我是从安装程序类调用这一行的,这意味着msiexec当前正在工作,我得到的用户名是SYSTEM,而不是当前登录到windows的实际用户
当然,Environment.UserName也会返回“SYSTEM”,而不是登录用户
如何以登录用户而不是用户系统的身份启动进程?您可以像这样获取当前登录用户的用户名-
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
从-
我认为,当您调用
Environment.UserName
时,您会得到当前进程模拟的用户的值,而如果您调用Environment.GetEnvironmentVariable(“UserName”)
时,您会得到启动进程的用户的名称,此时进程不会启动,当然,尚未模拟其他用户
然而,这只是一个对OP问题有效的原始想法,但我仍在寻找一些参考资料来证实我的主张。我欢迎任何比我更了解这一事实并更好地解释这一事实的人我如何使用它来运行一个包含我获得的信息的流程?
process.Start(pathToProgram
将仅为当前登录用户启动进程。不是吗?它将以运行该命令的用户的身份启动进程。因为它是在程序安装期间,运行该命令的用户是系统,而不是登录用户。此行不起作用。我从此行获得的用户名是:“NT AUTHORITY\\SYSTEM”然后您必须以系统本身的身份登录。现在无法测试,但您是否尝试调用环境.GetEnvironmentVariable(“用户名”);
?它与特定上下文中的Environment.USERNAME不同?没有“登录用户”这类东西。请记住,Windows是一个多用户操作系统。可能没有用户登录、一个用户、多个用户、多个远程用户以及以上任何组合。因此,您需要更清楚地定义“登录用户”的含义以及您希望如何处理这些其他情况。登录用户是在windows登录中输入其姓名和密码的用户名screen@Steve你的建议是成功的建议,而且确实有效。为什么它给了我我正在搜索的用户名而其他建议没有?如果你把它作为答案写下来,我会接受它作为答案正确答案。也许你想为我的后续问题尝试获得另一个正确答案:
Process p = new Process();
p.StartInfo.FileName = "C:\SetupVM.bat";
p.StartInfo.UserName = userName;
p.StartInfo.Password = "AdminPassword";
p.Start();
p.WaitForExit();