我尝试过很多解决方案,但不知为何它们都没有效果。
我目前可以从 vbs 启动没有命令窗口的 bat 文件,但我不知道如何以管理员身份启动它。
VBScript(因此我可以在不使用命令窗口的情况下启动批处理文件):
Set oShell = CreateObject ("Wscript.Shell") Dim strArgs strArgs = "cmd /c Start.bat" oShell.Run strArgs, 0, false
批处理(Start.bat):
Start /wait Application.exe Net stop ServiceNameGoesHere
如何以管理员身份启动批处理文件同时仍使其不可见?
答案1
您可以使用执行命令方法Windows Shell 对象而是使用runas
操作。
Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "Start.bat", , , "runas", 0
这将请求提升并运行Start.bat
。
ShellExecute 的参数是(摘录并总结自 MSDN 上的 ShellExecute 页面):
- s文件[in] - 要执行操作的文件名字符串
- 参数[in,可选] – 参数字符串(命令行参数)
- 虚拟目录[in,可选] - 包含 sFile 指定的文件的目录的完全限定路径。如果未指定此参数,则使用当前工作目录。
- 虚拟操作[in,可选] - 要执行的操作。如果未指定此参数,则执行默认操作。
- 虚拟展示[in,可选] - 初始窗口显示建议。0 为隐藏。
如果您必须使用cmd /c
来运行批处理文件,则需要指定它的完整路径。调用将如下所示:
Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "cmd", "/c F:\ull\path\to\Start.bat", , "runas", 0
答案2
您可以将此代码添加到批处理文件的顶部,它将自行请求管理员权限:
@echo off
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
<YOUR BATCH SCRIPT HERE>