运行从另一个批处理文件批处理文件作为admisitrator
问题描述:
我需要运行一个批处理文件(SETUP.BAT),它会调用另一个批处理文件(make_dir.bat)将在“C创建一个文件夹:\ Program Files文件“ 目录。这是一个内部安装程序。所有用户都将以其用户名登录,但具有本地管理员权限。我尝试了两种方法,但都没有奏效。运行从另一个批处理文件批处理文件作为admisitrator
方法1:
SET PRGFILES=%programfiles%\mySoftware
SET admin=N
SET domain=%USERDOMAIN%\
IF /i "%domain%" EQU "%computername%\" set domain=
SET user=%domain%%username%
FOR /f "Tokens=*" %%a IN ('net localgroup administrators^|find /i "%user%"') DO SET admin=Y
IF "%admin%"=="Y" (
MD "%PRGFILES%"
)
这是说Access is denied
方法2:
runas /user:%Username% shell\make_dir.bat
其中make_dir.bat是
md "%programfiles%\mySoftware"
这要求当前使用rname和密码,但以某种方式失败后。我检查了所有用户都具有本地管理员权限,并且可以在他们的programfiles
文件夹中手动创建文件夹。
感谢您的帮助。
答
我用这样的脚本来运行.BAT文件作为管理员,使用JScript的:
var batch = "fixuac.bat" var fso = new ActiveXObject("Scripting.FileSystemObject"); var curdir = fso.GetParentFolderName(WScript.ScriptFullName); var wbemFlagReturnImmediately = 0x10; var wbemFlagForwardOnly = 0x20; var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2"); // var objWMIService = GetObject("winmgmts:" + "{impersonationLevel=impersonate}!\\" + "." + "\root\cimv2"); var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly); var enumItems = new Enumerator(colItems); var objItem = enumItems.item(); // http://en.wikipedia.org/wiki/Ver_(command) var major_ver = objItem.Version.split(".")[0]; 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 ]) // If (vShow==1) open the application with a normal window. // Check for Vista and upper. if (major_ver >= 6) { // Request admin permission. objShell.ShellExecute(batch, curdir, "", "runas", 1); } else { objShell.ShellExecute(batch, curdir); }
它适用于Vista和更大。 WinXP的一些如何有问题,不记得正是... – gavenkoa 2012-08-07 08:48:12
用户将被提示输入管理员权限(是/否对话框)... – gavenkoa 2012-08-07 08:49:00