Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取登录的用户名以使用激活进程_C#_Process_Process.start - Fatal编程技术网

C# 获取登录的用户名以使用激活进程

C# 获取登录的用户名以使用激活进程,c#,process,process.start,C#,Process,Process.start,我正在使用C#和.NET3.5 我的目标是使用登录的用户名,并简单地在此用户名下启动一个进程。通常一个简单的进程.Start(pathToProgram)在这里会有所帮助,但问题是我是从安装程序类调用这一行的,这意味着msiexec当前正在工作,我得到的用户名是SYSTEM,而不是当前登录到windows的实际用户 当然,Environment.UserName也会返回“SYSTEM”,而不是登录用户 如何以登录用户而不是用户系统的身份启动进程?您可以像这样获取当前登录用户的用户名- strin

我正在使用C#和.NET3.5

我的目标是使用登录的用户名,并简单地在此用户名下启动一个进程。通常一个简单的
进程.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();