如何获取XP、Vist和7、32位中的所有用户帐户名或64位和任何操作系统语言我有一个C#winform应用程序,它将安装在Windows7、Vista和XP机器上,32位或64位,操作系统为英语、德语和西班牙语(以及未来的其他语言).我需要获取本地计算机上所有管理员和用户帐户名称的列表。我只需要一个帐户名列表,仅此而已。问题是我的代码只适用于英文操作系统。有没有办法在本地机器上获取用户名,而不管操作系统的语言,无论是XP、Vista还是7,无论是32位还是64位?我阅读了一篇关于使用SID获取本地管理员名称以防它被重命名的帖子。使用SID可以帮助解决我的问题吗?下面是我的代码。在德国操作系统机器上,代码在“DirectoryEntryadmGroup=localMachine.Children.Find(“administrators”,“group”);”行失败它很可能会失败,因为“Administrator”、“Group”这两个词在德语操作系统中的拼写可能不同。西班牙操作系统也是如此。我的32位操作系统代码:DirectoryEntrylocalMachine=newDirectoryEntry("WinNT://"+Environment.MachineName);DirectoryEntryadmGroup=localMachine.Children。Find("管理员","组");objectadminmembers=admGroup.Invoke("成员",null);DirectoryEntryuserGroup=localMachine.Children.Find("用户","组");objectusermembers=userGroup.Invoke("成员",null);//检索每个用户名。foreach(objectgroupMemberin(IEnumerable)adminmembers){DirectoryEntrymember=newDirectoryEntry(groupMember);if(!(member.Name=="admin"||member.Name=="DomainAdmins")){drow=dtWindowsUser.NewRow();drow["WindowsUser"]=member.Name;//向数据表添加行dtWindowsUser.Rows.Add(drow);}}foreach(objectgroupMemberin(IEnumerable)usermembers){DirectoryEntrymember=newDirectoryEntry(groupMember);if(!(member.Name=="ACTUser"||member.Name=="ASPNET"||member.Name=="DomainUsers"||member.Name=="AuthenticatedUsers"||member.Name=="交互式"||member.Name=="SQLDebugger")){drow=dtWindowsUser.NewRow();drow["WindowsUser"]=member.Name;//向数据表添加行dtWindowsUser.Rows。添加(卓尔);我的64位操作系统代码:SelectQueryquery=newSelectQuery("Win32_UserAccount");ManagementObjectSearcher搜索器=newManagementObjectSearcher(query);foreach(ManagementObjectenvVarinsearcher.Get()){str_name=envVar["Name"].ToString();if(!(str_name=="admin"||str_name=="DomainAdmins")){if(!(str_name=="ACTUser"||str_name=="ASPNET"||str_name=="DomainUsers"||str_name=="AuthenticatedUsers"||str_name=="INTERACTIVE"||str_name=="SQLDebugger")){if(!(str_name=="HomeGroupUser$")){drow=dtWindowsUser.NewRow();drow["WindowsUser"]=str_name;//向数据表添加行dtWindowsUser.Rows.Add(drow);}}}}你不想按NameRetrievalGroups-他们可以根据你的需要重命名.这是检索所需数据的一种方法...SecurityIdentifierbuiltinAdminSid=newSecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid,null);PrincipalContextctx=newPrincipalContext(ContextType.Machine);GroupPrincipalgroup=GroupPrincipal.FindByIdentity(ctx,Side.builtinAdmins)(principalpingroup.Members){Console.WriteLine(p.Name);编辑:@jyoung使用WellKnownSidType建议而不是使用StringbuiltinAdminsSidString="S-1-5-32-544";更好的字符串builtinAdminsSidString="S-1-5-32-544";所以我更改了上面的示例代码。这个关于如何获取内置管理员名称的示例可能会有所帮助。varbuiltinAdministratorsName=newSecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid,null).Translate(typeof(NTAccount)).Value;试试这个:使用System.Management;使用(varaccountSearcher=newSystem.Management.ManagementObjectSearcher("SELECT*FROMWin32_UserAccountWHERELocalAccount=True"))使用(varaccountCollection=accountSearcher.Get())foreach(varaccountinaccountCollection)this.listBox1.Items.Add(账户[“姓名”].ToString());使用GetSystemUILanguage获取语言say然后使用switchcase(你必须自己搜索文件夹名称)。以上就是C#学习教程:如何获取XP、Vist和7、32、64位和任何操作系统语言下的所有用户账号名分享全部内容,如果对大家有用还需要详细了解的C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
