Request Windows Vista UAC elevation if path is protected?

14,820

Solution 1

The best way to detect if they are unable to perform an action is to attempt it and catch the UnauthorizedAccessException.

However as @DannySmurf correctly points out you can only elevate a COM object or separate process.

There is a demonstration application within the Windows SDK Cross Technology Samples called UAC Demo. This demonstration application shows a method of executing actions with an elevated process. It also demonstrates how to find out if a user is currently an administrator.

Solution 2

Requesting elevation mid-execution requires that you either:

  1. Use a COM control that's elevated, which will put up a prompt
  2. Start a second process that is elevated from the start.

In .NET, there is currently no way to elevate a running process; you have to do one of the hackery things above, but all that does is give the user the appearance that the current process is being elevated.

The only way I can think of to check if a path is UAC elevated is to try to do some trivial write to it while you're in an un-elevated state, catch the exception, elevate and try again.

Solution 3

I'm not sure if it is of any help for you but you can take a look at this blog post:

http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html

Solution 4

You may want to notify the user that the path is protected and ask them to output the file to a "safer" area. This way your app will not need elevation. I'm sure it depends on your users and what you are trying to do, however I don't think it's too much to kindly let the user know you don't feel ok dumping xyz into the Windows/System32 folder.

Share:
14,820
sieben
Author by

sieben

Updated on June 06, 2022

Comments

  • sieben
    sieben almost 2 years

    For my C# app, I don't want to always prompt for elevation on application start, but if they choose an output path that is UAC protected then I need to request elevation.

    So, how do I check if a path is UAC protected and then how do I request elevation mid-execution?