¿Cómo elevar automáticamente un archivo por lotes para ejecutarlo como administrador?

2018-08-18 05:27:54
Principal·Microsoft·¿Cómo elevar automáticamente un archivo por lotes para ejecutarlo como administrador?

Para elevar los archivos por lotes manualmente, debe hacer clic derecho sobre él y elegir Ejecutar como administrador. Aquí hay una manera de elevar automáticamente un archivo por lotes que requiere privilegios elevados para ejecutarse correctamente. Esto es equivalente a elegir "Ejecutar como administrador" haciendo clic derecho en un archivo por lotes. En cualquier caso, el aviso de UAC aún se mostraría.

Elevación automática de un archivo por lotes

:::::::::::::::::::::::::::::::::::::::::::: :: Automatically check & get admin rights V2 :::::::::::::::::::::::::::::::::::::::::::: @echo off CLS ECHO. ECHO ============================= ECHO Running Admin shell ECHO ============================= :init setlocal DisableDelayedExpansion set "batchPath=%~0" for %%k in (%0) do set batchName=%%~nk set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs" setlocal EnableDelayedExpansion :checkPrivileges NET FILE 1>NUL 2>NUL if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) :getPrivileges if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges) ECHO. ECHO ************************************** ECHO Invoking UAC for Privilege Escalation ECHO ************************************** ECHO Set UAC = CreateObject^("Shell.Application"^)>"%vbsGetPrivileges%" ECHO args = "ELEV ">>"%vbsGetPrivileges%" ECHO For Each strArg in WScript.Arguments>>"%vbsGetPrivileges%" ECHO args = args ^& strArg ^& " ">>"%vbsGetPrivileges%" ECHO Next>>"%vbsGetPrivileges%" ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1>>"%vbsGetPrivileges%" "%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %* exit /B :gotPrivileges setlocal & pushd . cd /d %~dp0 if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1) :::::::::::::::::::::::::::: ::START :::::::::::::::::::::::::::: REM Run shell as admin (example) - put here code as you like ECHO %batchName% Arguments: %1 %2 %3 %4 %5 %6 %7 %8 %9 cmd /k 

Agregue sus instrucciones a este archivo .bat bajo la etiqueta "INICIO".

Este archivo por lotes crea un archivo Vbscript que luego vuelve a iniciar el archivo por lotes como administrador (si aún no se está ejecutando con privilegios de administrador) utilizando el parámetro "runas" que se necesita para elevarlo. El método Vbscript y "runas" se ha cubierto en mi antigua publicación Vbscripts y elevación de UAC en Windows Vista y superior.

Créditos a Matt en Stack Overflow para este método. Windows: ¿cómo puedo elevar automáticamente mi archivo por lotes para que solicite los derechos de administrador de UAC si es necesario?

Ejecución de archivos por lotes elevados por defecto

Además del método de elevación automática anterior, desde el lado del cliente puede modificar el registro para que los archivos por lotes siempre comiencen a elevarse, mostrando el indicador de UAC. Esto se hace cambiando la acción predeterminada de doble clic de "abrir" a "runas" en el registro. Usa estos pasos:

Inicie Regedit.exe y vaya a la siguiente ubicación:

 HKEY_CLASSES_ROOT \ batfile \ shell 

Haga doble clic (predeterminado) y establezca sus datos de valor como runas

Salga del Editor del registro.

Después de este cambio, los archivos por lotes siempre se ejecutarán elevados cuando se haga doble clic. Ejecutar como administrador sería la opción predeterminada que se muestra al hacer clic con el botón derecho en un archivo .bat.

La Elección Del Editor