检测Windows Server 2008或更高版本上的提升权限

时间:2016-01-26 11:14:18

标签: c# privileges access-control windows-server administrator

我有一个在Windows Server平台(2008或更高版本)上运行的C#,。Net 4.6.1 Windows窗体应用程序,它需要以管理员身份运行"。需要提升权限,因为应用程序更改了各种文件夹上的用户访问权限(如果重要,则在IIS默认网站根目录下)。

我没有运气检测应用程序是否已经"以管理员身份运行"。如果我正常启动应用程序(即作为管理员),则使用以下代码

var isAdmin = WindowsIdentity.GetCurrent().Owner.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid);

返回true,但更改目录上某些用户访问权限的代码失败,权限错误不足。

如果我以管理员身份运行该应用程序,上面的检查也会返回true,但更改用户访问权限的工作正常。

我没有成功的其他尝试:

  • 按照建议here
  • 在advapi32.dll中使用GetTokenInformation方法
  • 将清单文件添加到我将requestedExecutionLevel设置为requireAdministrator
  • 的应用程序中

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

尝试更改已知文件夹的权限,如果有异常,则表示该程序尚未以管理员身份运行。

答案 1 :(得分:2)

以下必须有效(我希望如此;我有一个Windows客户端并且它与我一起工作)。

var Identity = WindowsIdentity.GetCurrent();
var Principal = new WindowsPrincipal(Identity);
bool IsAdmin = Principal.IsInRole(WindowsBuiltInRole.Administrator);