How to force my project in Visual Studio 2013 to always run as Administrator?

CampDev picture CampDev · Apr 1, 2014 · Viewed 8.3k times · Source

I have a WPF project in Visual Studio 2013, this project have two buttons. The first button say Start Service and the second say Stop Service. When I run my Visual Studio as Administrator, the buttons work. But when I open my Visual Studio without privilages, the InvalidOperationException exception appear.

How to force my project start with privilages when Visual Studio doesn't run as administrator?

I added app.manifest to my project and change for

level="requireAdministrator" uiAccess="false"/>

but it didn't function.

For start or stop my service, I am using ServiceController.

Answer

Mehrad picture Mehrad · Oct 3, 2014

As Torben M. Philippsen mentions in his article:

  • 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

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    

    To

    <requestedExecutionLevel level="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:

Selecting 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);
     }