Necesito ejecutar un archivo por lotes que necesita registrar una DLL. El registro de la DLL está fallando porque el archivo por lotes no está iniciando el símbolo del sistema como "administrador".
¿Hay alguna manera de iniciar el "Símbolo del sistema" como administrador** a través del archivo por lotes.
Entorno: Win7/Vista
Es posible que tenga que utilizar otro archivo por lotes primero para lanzar el segundo con derechos de administrador.
En el primer uso
runas /noprofile /user:mymachine\administrator yourbatchfile.bat
Después de la lectura, debe ser capaz de escribir la contraseña en el prompt. No se puede pipetear la contraseña ya que esta función fue bloqueada por razones de seguridad.
Puede tener más suerte con psexec.
(Esto se basa en la respuesta de @DarkXphenomenon's, que lamentablemente tenía algunos problemas).
Tienes que encerrar tu código dentro de esta envoltura:
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
Esto hace que el archivo por lotes se ejecute como usuario elevado. Añade dos parámetros al código privilegiado:
la palabra payload
, para indicar que se trata de una llamada payload, es decir, que ya está elevado. De lo contrario,
abriría nuevos procesos una y otra vez.
ruta del directorio donde se llamó al script principal. Debido al hecho de que Windows siempre comienza elevado cmd.exe en "%windir%\system32", there's ninguna manera fácil de saber lo que la ruta original era (y conservar la capacidad de copiar su script alrededor sin tocar el código)
Nota: Desafortunadamente, por alguna razón shift
no funciona para %*
, así que si necesita
pasar argumentos reales, tendrá que recurrir a la fea notación que usé
en el ejemplo (%1 %2 %3 %4 %5 %6 %7 %8 %9
), que además trae el límite de
máximo de 9 argumentos
Usted puede utilizar un acceso directo que enlaza con el archivo por lotes. Sólo tienes que ir a las propiedades para el acceso directo y seleccione avanzada, entonces "ejecutar como administrador".
A continuación, sólo hacer el archivo por lotes oculto, y ejecutar el acceso directo.
De esta manera, usted puede incluso establecer su propio icono para el acceso directo.