Force a program to run *without* administrator privileges or UAC?
Is there any way that I can force a program that normally requires administrator privileges (via UAC) to run without them? (ie: no UAC prompt and no system-wide access.)
Added: Without modifying the executable itself.
In spite of James's answer, I have found a few ways that it can almost be done:
- By modifying the executable I can remove the
trustInfo
entry from the manifest (or the manifest entirely, so I can use an external one), allowing the program to start without UAC. Unfortunately this modifies the executable, so it exits shortly after due to an internal checksum test. - By using Process Explorer I can launch it as a Limited User. However this seems to limit it significantly more than I would like (it runs like Protected Mode IE and so can access significantly less than what my standard un-elevated user can).
Solution 1:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without privilege elevation"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""
Save this text in <name_of_file>.reg
and add it to the Windows Registry. (Double-clicking on it should do the trick.)
Afterwards, right-click the app you'd like to run without administrative privileges and select "Run without privilege elevation".
In some cases - small amount 0.1% of programs may ask twice about UAC prompt.
Solution 2:
Save to nonadmin.bat
:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Now you can drag and drop programs to this to run them without admin.
This doesn't require admin privileges as changing that registry key does. Also you won't clutter the context menu.
Based on Vom's answer
Update: Should now work with programs that have spaces in name as well.
Solution 3:
I hope I'm not too late to the party, but I was looking for a similar question and without seeing an answer here I found out that Windows' builtin RunAs
command, when run as administrator, can do that with /trustlevel
switch.
RUNAS /trustlevel:<TrustLevel> program
/showtrustlevels displays the trust levels that can be used
as arguments to /trustlevel.
/trustlevel <Level> should be one of levels enumerated
in /showtrustlevels.
This worked in my case. Ironically, starting a program explicitly without elevation requires an elevated command prompt. Go figure. :) I hope it helps you.