在批处理文件中以管理员身份运行另一个批处理文件

3
我需要运行一个批处理文件(setup.bat),它将调用另一个批处理文件(make_dir.bat),该文件将在“C:\Program Files”目录中创建一个文件夹。这是为内部安装程序准备的。所有用户都将使用自己的用户名登录,但将拥有本地管理员权限。我尝试了两种方法,但都不起作用。
方法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%"
)

这段话意思是“访问被拒绝”。 方法二:
runas /user:%Username% shell\make_dir.bat

make_dir.bat所在的位置

md "%programfiles%\mySoftware"

这个问题需要输入当前用户名和密码,但在此之后似乎出现了故障。我已经检查过所有用户都具有本地管理员权限,并且可以手动在他们的programfiles文件夹中创建文件夹。

感谢您的帮助。

1个回答

2

我使用以下脚本以管理员身份运行.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]) // 如果(vShow==1),则使用普通窗口打开应用程序。 // 检查是否为 Vista 或更高版本。 if (major_ver >= 6) { // 请求管理员权限。 objShell.ShellExecute(batch, curdir, "", "runas", 1); } else { objShell.ShellExecute(batch, curdir); }

它适用于Vista及更高版本。WinXP似乎有问题,不记得确切情况了... - gavenkoa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接