Working with UAC (User Access control) in relation to win vista, win7 and win server 2008 can be quite troublesome.
Yesterday we found that one our helper apps, which has a feature to start and stop services both local and remotely, didn’t work as expected. When running the application in elevated mode, everything worked fine.
Since we can’t expect all users to remember to run the application in elevated mode, we needed to find a more permanent solution.
I have previously been working with UAC problems relating to processes not running in elevated mode, but i didn’t know how to force the entire application ro run in elevated mode. Google turned out to be my friend again and I found tons of articles telling me “just” to add a manifest file changing the existing:
<requestedExecutionLevellevel=“asInvoker“uiAccess=“false“ />
to:
<requestedExecutionLevellevel=“requireAdministrator“uiAccess=“false“ />
Simple one would think – and it was, so You might figure my level of frustration, when this turned out not to be enough.
Actually there was nothing wrong with the suggested solution, but all post that I read, failed to explain how to tell Visual Studio to use the added manifest file – I had to figure that out myself. A complete solution on how to force Your application to always run in elevated mode wil be listed here:
- In Visual Studio 2010 (I guess the same applies to VS2008, but I haven’t tested it) right click Your project and select “add new item”
- Add a application manifest file – the default name will be app.manifest.
- Inside the manifest file, change the existing configuration from
<requestedExecutionLevellevel=”asInvoker”uiAccess=”false” />
To
<requestedExecutionLevellevel=”requireAdministrator”uiAccess=”false” />
- Save and close the manifest file.
- Please note that Your manifest file won’t show up anywhere in your solution. In order to fix that, in solution explorer, click the “show all files” button.
- Important: Right click the manifest file and add it to the project – we need that in order to tell VS to use the manifest file when compiling our application.
- Right click Your project and select “properties”.
- On the application tab, the bottom section, select the manifest file:
manifest file selection
- Compile and run the application. If Your UAC settings are enabled, You will be prompted to allow the application to start in elevated mode.
Sometimes it can come in handy to check whether Your application is actually running in elevated mode or not. Maybe You will find this codesnippet usefull:
WindowsPrincipal myPrincipal = new WindowsPrincipal (WindowsIdentity .GetCurrent());
if (myPrincipal.IsInRole(WindowsBuiltInRole .Administrator) == false )
{
//show messagebox - displaying a messange to the user that rights are missing
MessageBox .Show("You need to run the application using the \\"run as administrator\\" option" , "administrator right required" , MessageBoxButtons .OK, MessageBoxIcon .Exclamation);
}
else
{
MessageBox .Show("You are good to go - application running in elevated mode" , "Good job" , MessageBoxButtons .OK, MessageBoxIcon .Information);
}
You may also find these references helpfull:
No comments :
Post a Comment