How to request administrator permissions when the program starts?

C#WindowsWindows 7Windows Vista

C# Problem Overview


I need my software to be able to run as administrator on Windows Vista (if someone runs it without administrative permissions, it will crash).

When launching other software, I've seen a prompt by the system like "this software will run as administrator. do you want to continue?" when the app was trying to acquire administrative privileges.

How do I request administrative privileges when running an c# app on Windows Vista?

C# Solutions


Solution 1 - C#

Add the following to your manifest file:

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

You can also use highestAvailable for the level.

Look here about embedding manifest files:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

PS: If you don't have a manifest file, you can easily add a new one:

> In Visual Studio, right click project -> Add Item -> Choose > Application Manifest File ( under General for Visual C# items)

The added file will already have the above part, just change the level to requireAdministrator from asInvoker

Solution 2 - C#

Put this XML in a file called yourexename.exe.manifest:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable" />
     </requestedPrivileges>
   </security>
</trustInfo>
</assembly>

Solution 3 - C#

Solution 4 - C#

For .Net (Visual Studio 2013), include a manifest file that request administrator elevation and using the compiler's /win32manifest flag, compose and provide a manifest file that requests this elevation. However, the following describe doing so within Visual Studio for a project name, App.Exe:

  1. Create a file with the following content (for convenience you may add the file to the Visual Studio project as a development resource by ensuring that it's Build Action is None and Copy to Output... is Do not copy. By convention manifest files are named after their output target, in this case App.Exe.manifest. If you require uiAccess (User Interface), the assembly must be strongly named.

    <?xml version="1.0" encoding="utf-8" ?>
    <asmv1:assembly manifestVersion="1.0" 
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity version="1.0.0.0" name="App" />
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:assembly>
    
  2. Edit the project dialogue's build panel Other flags: entry field to add the win32manifest flag and have Visual Studio invoke the compiler accordingly. For example, in this case,

    /win32manifest:App.Exe.manifest.

Note the following entry:

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionArsen ZahrayView Question on Stackoverflow
Solution 1 - C#manojldsView Answer on Stackoverflow
Solution 2 - C#Steve DannerView Answer on Stackoverflow
Solution 3 - C#PolynomialView Answer on Stackoverflow
Solution 4 - C#GeorgeView Answer on Stackoverflow