Como criar um ficheiro de lote para correr cmd como administrador

Preciso de executar um ficheiro de lote que precisa de registar uma DLL. O registo de DLL está a falhar porque o ficheiro de Lote não está a iniciar o comando como "administrador".

Existe alguma forma de iniciar o "Pedido de comando" como administrador através do ficheiro do lote.

Ambiente: Win7/Vista

Solução

Poderá ter de utilizar outro ficheiro de lote primeiro para lançar o segundo com direitos de administrador.

Na primeira utilização

runas /noprofile /user:mymachine\administrator yourbatchfile.bat

Ao ler mais, deve ser capaz de digitar a palavra-passe no momento da leitura. Não é possível canalizar a palavra-passe, uma vez que esta funcionalidade foi bloqueada por razões de segurança.

Poderá ter mais sorte com psexec.

Comentários (3)

(Esta é baseada em @DarkXphenomenon's answer, que infelizmente teve alguns problemas).

Tem de incluir o seu código dentro deste invólucro:

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

Isto faz com que o ficheiro de lote seja executado por si próprio como utilizador elevado. Adiciona dois parâmetros ao código privilegiado:

  • palavra payload, para indicar que se trata de chamada de carga útil, ou seja, já elevada. Caso contrário abriria novos processos repetidamente.

  • caminho do directório onde o guião principal foi chamado. Devido ao facto de que o Windows de qualquer forma começa cmd.exe elevado in "%windir%\system32", there's no easy way of knowing what o caminho original era (e manter a capacidade de copiar o seu guião por aí sem código de toque)

Note: Infelizmente, por alguma razão o shift não funciona para %*, por isso se precisar para transmitir argumentos reais, terá de recorrer à notação feia que utilizei no exemplo (`%1 %2 %3 %4 %5 %6 %7 %8 %9'), o que também traz o limite de máximo de 9 argumentos

Comentários (0)

Pode utilizar um atalho que faz a ligação ao ficheiro do lote. Basta ir às propriedades do atalho e seleccionar avançado, depois "correr como administrador".

Depois basta fazer o ficheiro de lote escondido, e executar o atalho.

Desta forma, pode mesmo definir o seu próprio ícone para o atalho.

Comentários (3)