English 中文(简体)
使用C#确定LocalSystem帐户名称
原标题:
  • 时间:2008-10-15 14:31:24
  •  标签:

我们有一个应用程序,可以通过命令行安装 SQL Server Express,通过参数 SQLACCOUNT="NT AUTHORITYSYSTEM" 指定服务帐户为 LocalSystem 帐户。

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

将此翻译成中文: http://forums.microsoft.com/MSR/ShowPost.aspx?PostID=685354&SiteID=37 http://forums.microsoft.com/MSR/ShowPost.aspx?PostID=685354&SiteID=37

这似乎不完整(瑞典语版本没有列出)。因此,我希望能够编程确定名称,也许可以使用SID?

我找到了一些VB脚本来实现这个。

Set objWMI = GetObject("winmgmts:rootcimv2") 

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到名称查找 - 例如,即使您正在运行的用户帐户仅在“访客”组中,此代码也应该可以正常工作。如果SID解析为域帐户,则情况会有所不同,但只要您登录到域上(并且在查找时有域控制器可用),即使在大多数情况下也应该可以正确工作。

问题回答

或者你可以使用:

string localSystem = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null).Translate(typeof(NTAccount)).Value;

通过WellKnownSidType,您可以查找其他帐户,例如NetworkService

这应该做类似于你发布的东西。我不确定怎么立刻获取WMI对象的特定属性,但这将为您提供语法的起点:

ManagementObject m = new ManagementObject("winmgmts:rootcimv2");
m.Get();
MessageBox.Show(m["Win32_SID.SID= S-1-5-18 "].ToString());

被接受的答案存在问题,即账户名称必须能够被运行代码的本地机器解析。

如果您正在阅读远程计算机的ACL,则可能无法解析远程框上的域SID/本地SID。以下使用WMI,并将远程计算机和您要解析的SID作为参数。

/// <summary>
/// Returns the Account name for the specified SID 
// using WMI against the specified remote machine
/// </summary>
private string RemoteSID2AccountName(String MachineName, String SIDString)
{
    ManagementScope oScope = new ManagementScope(@"\" + MachineName +     
       @"
ootcimv2");
    ManagementPath oPath = new ManagementPath("Win32_SID.SID= " + SIDString + " ");
    ManagementObject oObject = new ManagementObject(oScope, oPath, null);
    return oObject["AccountName"].ToString();
}




相关问题
热门标签