我们有一个从命令行安装 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# 中使用的等效代码吗?
最佳答案
您可以使用 .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 解析为域帐户,情况会有所不同,但在大多数情况下,只要您登录到该域(并且域 Controller 在查找时可用),在大多数情况下也应该可以正常工作.
关于c# - 使用 C# 确定 LocalSystem 帐户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/204942/