【发布时间】:2016-07-29 14:52:19
【问题描述】:
下面的批处理混合脚本旨在在运行某些需要提升权限的任务之前自动调用管理员权限。它确实会弹出 UAC 提示,但无论用户选择如何,都不会授予管理员权限。
我想知道Window的ShellExecute函数是否可以接受WSF参数或其他可扩展参数?在这种情况下,它的批处理文件名。如果可以,应该如何更改脚本而不进行重组以使用不同的方法?
<!-- : Begin batch script
@echo off
setlocal EnableExtensions EnableDelayedExpansion
CD /D "%~dp0" & echo "%*"
set "dir=%temp%\Unzip"
set "file=%USERPROFILE%\Downloads\archive.zip"
if not "%1"=="ADR" (call :GetAdminRights
if defined adm cscript //nologo "%~f0?.wsf" //job:ADM "%~nx0")
>nul 2>&1 net file && (echo/ & echo "!errorlevel!") || ^
(echo/ & echo "!errorlevel!" & goto :end)
:: add your code here
echo Performing admin tasks
echo Hello >C:\test.txt
:end
timeout 5
exit /b
:GetAdminRights
REM Check for permissions
>nul 2>&1 net file
REM If error flag set, user don't have admin permissions
if '!errorlevel!' NEQ '0' (echo Requesting administrative privileges...
set "adm=0"
echo/ & echo "!errorlevel!" "%~nx0" "%~dp0" & echo/)
exit /b
----- Begin wsf script --->
<package>
<job id="ADM"><script language="VBScript">
Set UAC = CreateObject("Shell.Application")
WScript.Echo wscript.Arguments(0)
UAC.ShellExecute "cmd.exe", "/c ""wscript.Arguments(0)"" ADR", "", "runas", 1
</script></job>
</package>
:: Error in UAC Prompt (shown in details. Can't expand batch name correctly.)
Program location: "C:\Windows\System32\cmd.exe /c "wscript.Arguments(0)" ADR
【问题讨论】:
-
为什么你的脚本需要管理员权限?
-
@Bill_Stewart 我编辑了这个问题以举例说明这种要求。但是,我更感兴趣的是学习 ShellExecute 的限制,而不是找到“任何”可能的方式来完成任务。 :)
-
我看不出你在哪里说你为什么需要管理员权限。你只是说“在运行一些用户任务之前”。什么任务? (用户任务不需要管理员权限。)
-
@Bill_Stewart 我编辑了文本。管理任务的示例 IMO 对我的问题不是必不可少的,但我在代码中给出了一个示例,例如将文件保存到 C: 驱动器。现在您能否直接回答有关 ShellExecute 功能限制的问题。 :)
-
我建议不要使用批处理/WSF,而是使用 PowerShell。
标签: batch-file shellexecute hybrid wsh