c# - 使用 C# 确定 LocalSystem 帐户名

标签 c# sql-server localsystem

我们有一个从命令行安装 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/

相关文章:

c# - 如何关闭外部网络浏览器中的选项卡?

c# - ASP.NET API Owin 以另一个用户身份登录

mysql - SQL 使用两列索引或两个单索引(x = ? and y > ?)

.net - 是否可以以 `Local System` 用户身份运行测试?

c# - 作为系统执行任务?

c# - .NET和sql server数据库链接

SQL Server : does order of full outer join matter?

sql - 如何在 .NET/Sql Server 中在用户本地时间发送电子邮件?

c# - 如何使用 C# 代码从 64 位机器上的 64 位应用程序获取 32 位应用程序数据文件夹

C# 为什么这种类型的推断方法调用不明确?