以管理员身份启动没有命令窗口的 bat 文件?

以管理员身份启动没有命令窗口的 bat 文件?

我尝试过很多解决方案,但不知为何它们都没有效果。

我目前可以从 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>

从这里: https://stackoverflow.com/a/10052222/5518385

相关内容