【发布时间】:2016-05-02 22:31:51
【问题描述】:
我有一个在 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的应用程序
提前感谢您的帮助。
【问题讨论】:
-
作为一种解决方法,您可以最初检查一下,您是否可以更改特定文件夹的访问权限,如果没有,请通知用户权限不足。不幸的是,我对这种代码没有直接经验,无法给出有用的答案:(
-
谢谢@Arvo。我现在实施了类似的解决方法。还是想找到答案。
-
那么当您使用清单时实际发生了什么?
-
您想知道当前运行程序的用户是管理员还是应用程序以管理员权限启动 -> “以管理员身份运行”。 Because currently you checking if the user is admin.
-
重复?见this,例如
标签: c# privileges access-control windows-server administrator