(Esto se basa en @DarkXphenomenon's answer, que desafortunadamente tuvo algunos problemas.)
Es necesario incluir su código dentro de este contenedor:
if _%1_==_payload_ goto :payload
:getadmin
echo %~nx0: elevating self
set vbs=%temp%\getadmin.vbs
echo Set UAC = CreateObject^("Shell.Application"^) >> "%vbs%"
echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
goto :eof
:payload
echo %~nx0: running payload with parameters:
echo %*
echo ---------------------------------------------------
cd /d %2
shift
shift
rem put your code here
rem e.g.: perl myscript.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof
Este archivo por lotes hace funcionar por sí mismo como usuario elevados. Se añade dos parámetros en el código privilegiado:
palabra payload
, para indicar esto es llamada carga útil, es decir, ya elevado. De lo contrario, solo abriría nuevos procesos una y otra vez.
vía de acceso de directorio donde se ha llamado al script principal. Debido al hecho de que Windows siempre aperturas elevadas cmd.exe en "% windir% \ system32", no hay manera fácil de saber cuál era la ruta original ( y retener capacidad de copiar la secuencia de comandos alrededor sin tocar código)
Nota: Desafortunadamente, por alguna razón shift
no funciona para %*
, así que si necesitas para pasar argumentos reales, usted tendrá que recurrir a la notación fea solía en el ejemplo ()), que también trae el límite de máximo de 9 argumentos
http://technet.microsoft.com/en-us/library/bb490994 –
Véase también [¿Cómo puedo auto-elevar mi archivo por lotes, por lo que solicita de los derechos de administrador de UAC si es necesario?] (http://stackoverflow.com/questions/7044985/how-can-i-auto-elevate-my-batch-file-so-that-it-requests-from-uac-admin -derechos) – GAThrawn
@EdGreaves es ese enlace no a esta pregunta? – notyou