【发布时间】:2011-06-16 20:32:09
【问题描述】:
我们有一个运行 MSBuild 脚本的安装程序,该脚本在本地计算机帐户的个人/我的证书存储中导入自签名证书。我在运行安装程序的服务器上的管理员组中,并且 UAC 未 启用。当我运行我的脚本并导入证书时,我无法在 IIS 中使用它。当我尝试将进程监视器分配给网站时,进程监视器显示访问被拒绝错误。
但是,当我以管理员身份显式运行我的脚本(右键单击并选择“以管理员身份运行”)时,证书已成功导入,我可以在 IIS 中使用它。这对我来说非常奇怪。
我如何判断我的脚本/程序是否以管理员身份运行?我想对安装脚本添加一个检查,如果它检测到它没有以这种奇怪的方式运行,则会失败“以管理员身份运行”权限。我更喜欢 C#/.NET 中的答案。
我尝试使用GetTokenInformation 来获取海拔类型,但这仅在启用 UAC 时有效。
使用 System.Security.Principal.WindowsIdentity.IsInRole(WindowsBuiltInRole.Administrator) 在常规和“提升”提示中返回 true。
我对比了System.Security.Principal.WindowsIdentity.GetCurrent 公开的所有者、用户和组 SIDS,列表在常规和“提升”提示中是相同的。
【问题讨论】:
-
@Rahul 不。两个 SID 都是相同的,并且都不是以 500 结尾。但是,它们都以 S-1-5 开头。
-
在这种情况下是
NT Authority。我提到的 SO 帖子链接还包括一个 MS KB 链接 (support.microsoft.com/kb/243330),并且根据此链接,SIDS-1-5表示为 SID:S-1-5 名称:NT 授权描述:标识符授权。要成为ADMINSID 必须是SID: S-1-5-21domain-500