Lança um arquivo bat sem uma janela de comando como administrador?

0

Eu tentei muitas soluções, mas elas não funcionaram, de alguma forma.

No momento, posso iniciar um arquivo bat sem janela de comando de um vbs, mas não sei como iniciá-lo como administrador.

VBScript (para que eu possa iniciar o arquivo em lote sem uma janela de comando):

Set oShell = CreateObject ("Wscript.Shell") Dim strArgs strArgs = "cmd /c Start.bat" oShell.Run strArgs, 0, false

Lote (Start.bat):

Start /wait Application.exe Net stop ServiceNameGoesHere

Como faço para iniciar o arquivo em lote como administrador enquanto ainda o mantenho invisível?

    
por POPCORNS 25.01.2017 / 14:53

2 respostas

2

Você pode usar o método ShellExecute do objeto do Windows , e use a operação runas .

Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "Start.bat", , , "runas", 0

Isso solicitará elevação e será executado Start.bat .

Os argumentos do ShellExecute são (extraídos e resumidos da página ShellExecute no MSDN):

  • sFile [in] - String do nome do arquivo para executar a operação em
  • vArguments [in, opcional] - Seqüência de argumentos (argumentos da linha de comando)
  • vDirectory [in, opcional] - O caminho completo do diretório que contém o arquivo especificado por sFile. Se este parâmetro não for especificado, o diretório de trabalho atual será usado.
  • vOperation [in, opcional] - A operação a ser executada. Se este parâmetro não for especificado, a operação padrão será executada.
  • vShow [in, opcional] - Recomendação inicial de exibição da janela. 0 para oculto.

Se você precisar usar cmd /c para executar o arquivo em lote, precisará especificar o caminho completo para ele. A invocação seria algo como isto:

Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "cmd", "/c F:\ull\path\to\Start.bat", , "runas", 0
    
por 25.01.2017 / 19:57
0

Você pode adicionar esse código ao topo do arquivo de lote e solicitará os direitos de administrador:

@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>

daqui: link

    
por 25.01.2017 / 15:08