当前位置:  开发笔记 > 编程语言 > 正文

使用C#确定LocalSystem帐户名称

如何解决《使用C#确定LocalSystem帐户名称》经验,为你挑选了1个好方法。

我们有一个应用程序从命令行安装SQL Server Express,并通过参数SQLACCOUNT ="NT AUTHORITY\SYSTEM"将服务帐户指定为LocalSystem帐户.

这不适用于不同的语言,因为LocalSystem的帐户名称不同.这里有一个列出差异的表格:

http://forums.microsoft.com/MSR/ShowPost.aspx?PostID=685354&SiteID=37

这似乎并不完整(未列出瑞典语版本).所以我希望能够以编程方式确定名称,也许使用SID?

我找到了一些VB脚本来做到这一点:

Set objWMI = GetObject("winmgmts:root\cimv2") 

Set objSid = objWMI.Get("Win32_SID.SID='S-1-5-18'") 

MsgBox objSid.ReferencedDomainName & "\" & objSid.AccountName 

有谁知道可以在C#中使用的等效代码?



1> mdb..:

您可以使用.NET的内置System.Security.Principal.SecurityIdentifier类来实现此目的:通过将其转换为NtAccount实例,您可以获取帐户名称:

using System.Security.Principal;


SecurityIdentifier sid = new SecurityIdentifier("S-1-5-18");
NTAccount acct = (NTAccount)sid.Translate(typeof(NTAccount));
Console.WriteLine(acct.Value);

稍后编辑,以回应评论中的问题:您不需要任何特殊权限即可在本地计算机上执行SID到名称查找 - 例如,即使您运行的用户帐户仅在Guests组中,这段代码应该有效.如果SID解析为域帐户,情况会有所不同,但即使这样在大多数情况下也能正常工作,只要您登录到域(并且在查找时域控制器可用) .

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有