Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Can I get UAC prompt for user from batch file?

For example I need put some keys to registry under CurrentControlSet from batch file by

  reg import path\to\my.reg

PS. runas is not a solution as my customers uses different Windows localisation and I can not guess which name used for Administrator account (this can be Администратор)...

And script don't know administrator password.

And UAC dialog box does not require password entering...

share|improve this question
    
Have you tried the runas command? –  Barend Oct 30 '11 at 14:16
    
I update answer in PS section... –  gavenkoa Oct 30 '11 at 14:26
    
In that case you may have to ship an application manifest with your batch file, e.g. such as in the "Requesting elevation" section of this wikipedia article. –  Barend Oct 30 '11 at 21:54
    
From Wikipedia: An assembly manifest is a text file containing metadata about .NET assemblies. Bat file does not use manifest... –  gavenkoa Oct 30 '11 at 23:40
add comment

3 Answers

Create a shortcut to reg.exe, give it the required arguments and set the "run as administrator" flag, then launch the shortcut from the batch file.

share|improve this answer
    
Finally I found solution. I can not create shortcut as script must perform action automatically... –  gavenkoa Oct 30 '11 at 23:37
    
@gavenkoa: why would using a shortcut prevent the script from performing the action automatically? –  Harry Johnston Feb 26 '13 at 18:27
    
OK, I firstly don't get your idea... It is easy to put shortcut into %TMP% dir... +1 –  gavenkoa Feb 26 '13 at 21:25
add comment

I really love this solution from Anders.

@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
    cscript //E:JScript //nologo "%~f0"
    @goto :EOF
)
reg import path\to\my.reg
@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5);
@end

Should work flawlessly

share|improve this answer
add comment
up vote 1 down vote accepted

I automatically generate .js and .bat files. From .js call .bat so .bat can perform privileged actions (like adding values to registry as in example).

JS:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var curdir = fso.GetParentFolderName(WScript.ScriptFullName);

var objShell = new ActiveXObject("shell.application");
// http://msdn.microsoft.com/en-us/library/windows/desktop/gg537745.aspx
//                 Shell.ShellExecute method
// iRetVal = Shell.ShellExecute( sFile, [ vArguments ], [ vDirectory ], [ vOperation ], [ vShow ] )
objShell.ShellExecute("regimport.bat", curdir, "", "runas", 1); 

BAT:

cd /d %1

reg import env_set.reg
pause
reg import env_del.reg
pause 

cd is essential as bat file start execution from %WINDIR%...

share|improve this answer
    
You can see practical example of this technique at sourceforge.net/u/gavenkoa/utils/ci/tip/tree/win/uac –  gavenkoa Nov 3 '11 at 21:55
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.