What is the difference between "asInvoker" and "highestAvailable" execution levels?

nathan picture nathan · Dec 29, 2011 · Viewed 58.7k times · Source

I've been wondering what the difference between embedding

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

and

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

in your application's manifest is.

Answer

Reed Copsey picture Reed Copsey · Dec 29, 2011

This is described on MSDN:

Basically, "asInvoker" will use the user's default security settings. It's described as "The application runs with the same access token as the parent process.", which means the same security token is used as the calling process, which is typically the desktop shell (or the process that launches this, if you launch your app from another program).

Using "highestAvailable" will cause the application to run using the highest priveledges the user can obtain. If they're an administrator, for example, they'll get a UAC prompt and the app will run with admin rights. However, if they're a normal user, they'll get normal security settings, etc.

In general, you'll want to use "asInvoker" unless you have a specific reason to request more rights.