Administrator-Privilegs for a Single Method

2020-03-21 05:29发布

Im Currently working on an ApplicationLauncher / Autoupdater. So for installing/updating an app to "Program Files", i need to request Administrator rights.

Well, since the Updater only needs to write something if new Versions are found, i tried to only request the privilegs, if a new Version is found.

The updater is executed everytime, before the application launches, so asking "everytime" for Adminrights is no solution...

I searched a lot, and found the following:

[PrincipalPermission(SecurityAction.Demand, Role = @"Administrators")]
    private void InstallOrUpdate(AppItem appItem)

but wenn i try to this, the updater throws a SecurityException...

Request for principal permission failed.

What am i doing wrong?

Best regards, dognose

标签: c# security
2条回答
成全新的幸福
2楼-- · 2020-03-21 05:52

You cannot elevate permissions for the application once it's running. In order to request the Administrators role, it will need to be done at startup time of the executable.

Your best option would be to have your updater either fire a different executable to do the InstallOrUpdate, or to re-run itself (with a different command line argument, potentially) with a request for elevated permissions at that point.

查看更多
趁早两清
3楼-- · 2020-03-21 06:01

UAC elevation is per-process, i.e. the process as a whole is elevated, not per single method. The best course of action, would be to create a specific action process that requires elevated privileges, and launch that process from your updater when it actually needs to do some work. This might help.

查看更多
登录 后发表回答