首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#确定LocalSystem帐户名

使用C#确定LocalSystem帐户名
EN

Stack Overflow用户
提问于 2008-10-15 14:31:24
回答 4查看 8.3K关注 0票数 2

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

这不适用于不同的语言,因为LocalSystem的帐户名称是不同的。下面的表格列出了不同之处:

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

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

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

代码语言:javascript
复制
Set objWMI = GetObject("winmgmts:root\cimv2") 

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-15 14:49:27

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

代码语言:javascript
复制
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解析为域帐户,情况会略有不同,但即使这样,在大多数情况下也应该正常工作,只要您登录到域(并且在查找时域控制器可用)。

票数 9
EN

Stack Overflow用户

发布于 2013-04-10 20:59:46

或者,您可以使用:

代码语言:javascript
复制
string localSystem = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null).Translate(typeof(NTAccount)).Value;

使用WellKnownSidType,您可以查找其他帐户,例如NetworkService

票数 3
EN

Stack Overflow用户

发布于 2008-10-15 14:34:38

这应该会做一些与你发布的类似的事情。我不确定如何立即获得WMI对象的特定属性,但这将使您从语法开始:

代码语言:javascript
复制
ManagementObject m = new ManagementObject("winmgmts:root\cimv2");
m.Get();
MessageBox.Show(m["Win32_SID.SID='S-1-5-18'"].ToString());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/204942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档