我有一个应用程序(C#,.NET4.5)放在远程计算机上,通过本地网络访问和执行。我们将应用程序放置在“AppPC”的计算机和正在使用应用程序“UserPC”的计算机调用。
我希望实现与此相同的目标,这是当前Windows用户的第一个名称(不是用户名):
System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;
当应用程序位于同一个UserPC上时,此代码工作正常,但如果应用程序位于AppPC上,则会引发异常。更确切地说是System.DirectoryServices.Protocols.LdapException:“无法建立连接。”
我可以使用以下命令找到UserPC的名称:
PrincipalContext ctx = new PrincipalContext(ContextType.Machine,null);
string pcName = ctx.ConnectedServer;
但是从那里开始,我不知道如何获取当前的用户名。
我尝试通过UserPrincipal
上的循环获取ctx
中的所有PrincipalSearcher.FindAll()
,但这只显示两个用户“Administrator”和“Guest”,这是假的,至少在UserPC。也许AppPC有那些用户,我不确定。
使用System.Environment.UserName
我可以获取用户名但不能获得名字,这是我感兴趣的。
编辑:忘了说我已经检查了这个并且也不起作用(null): How do I get the current username in .NET using C#?