Como codificar um arquivo BAT para sempre ser executado como modo de administrador?

149

Eu tenho essa linha dentro do meu arquivo BAT:

"Example1Server.exe"

Eu gostaria de executar isso no modo Administrador. Como modificar o código do bastão para executá-lo como administrador?

Isso está correto? Preciso colocar as aspas?

runas /user:Administrator invis.vbs Example1Server.exe
karikari
fonte
1
Veja também stackoverflow.com/questions/7690994/…
Ed Greaves
1
Veja também stackoverflow.com/questions/7044985/…
Ed Greaves

Respostas:

71

Você usa runaspara iniciar um programa como um usuário específico:

runas /user:Administrator Example1Server.exe
Kerrek SB
fonte
6
@karikari: Um nome como este ( Example1Server.exe) não precisa ser colocado entre aspas, mas em alguns outros casos (como espaços no nome :) Example1 Server.exevocê precisaria deles de fato. Você pode usar as aspas mesmo que elas não sejam necessárias.
precisa
18
A conta de administrador não pode ser nomeado Administrador
Anders
9
@ Anders: Não, não pode; Estou assumindo que o OP possa "identificar o padrão". Esta não foi uma resposta plz-give-me-the-codez: -S A propósito, devo acrescentar que o OP pode querer algum comando mais elaborado como runas /User:abc "csript myscript.vbs", ou runas /User:abc "cmd /c start ...".
Kerrek SB
16
Receio que essa resposta não seja o que 90% dos visitantes deseja, pois é ainda mais difícil do que clicar com o botão direito do mouse -> executar como administrador, mesmo que seja tecnicamente correto. Verifique novamente a outra resposta. É exatamente o que a maioria vai querer.
j riv
13
Não, esta resposta está tecnicamente incorreta. Executar como administrador não é o mesmo que executar sob um usuário cujo nome é Administrador e os privilégios são diferentes. Veja a outra resposta.
Alexander Gelbukh
370

A outra resposta requer que você insira a senha da conta de administrador. Além disso, executar sob uma conta no grupo de administradores não é o mesmo que executar como administrador, consulte: UAC na Wikipedia

Instruções do Windows 7

Para executar como administrador, crie um atalho para o arquivo em lotes.

  1. Clique com o botão direito do mouse no arquivo em lotes e clique em copiar
  2. Navegue para onde deseja o atalho
  3. Clique com o botão direito do mouse no plano de fundo do diretório
  4. Selecione Colar atalho

Em seguida, você pode definir o atalho para ser executado como administrador:

  1. Clique com o botão direito do mouse no atalho
  2. Escolha Propriedades
  3. Na guia Atalho, clique em Avançado
  4. Marque a caixa de seleção "Executar como administrador"
  5. Clique em OK, OK

Agora, quando você clica duas vezes no atalho, ele solicita a confirmação do UAC e, em seguida, Executar como administrador (que, como eu disse acima, é diferente de ser executado em uma conta no Grupo de administradores)

Verifique a imagem abaixo

Captura de tela

Nota: Quando você faz isso para Executar como administrador, o diretório atual (caminho) não será o mesmo que o arquivo bat. Isso pode causar alguns problemas em muitos casos em que o arquivo bat se refere a arquivos relativos ao lado. Por exemplo, no meu Windows 7, o diretório dir será SYSTEM32 em vez do local do arquivo bat! Para contornar isso , você deve usar

cd "%~dp0"

ou melhor

pushd "%~dp0"

para garantir que o diretório dir esteja no mesmo caminho em que o arquivo bat está.

Ed Greaves
fonte
8
Ah, isso estava realmente oculto (a maioria de nós não achava que aquele botão avançado tinha essa opção). Tenho quase certeza de que quem pensou na outra resposta complexa não sabia disso. Esta é a resposta que mais de 90% dos visitantes deseja.
j riv
1
Concordo. essa deve ser a resposta. Eu também adicionei uma imagem para torná-lo mais fácil de encontrar o avanço botão
fedmich
1
Isso também se aplica ao Windows Server 2012 R2.
garec 23/03
3
Isso não funciona para mim no Windows 10 ou no Windows 7. Quando tento executar como Administrador, clicando com o botão direito do mouse no arquivo BAT e em "Executar como Administrador" ou usando a técnica descrita aqui, o arquivo em lotes fica aberto por um segundo depois fecha imediatamente sem nenhum comando ou programa no arquivo em lotes em execução. Eu tentei executar arquivos em lote muito simples que apenas ecoam um "Hello World" e eles também falham dessa maneira. Isso é muito frustrante. Até agora, não consegui encontrar uma solução.
Jonathan Elkins
1
@JonathanElkins, você tentou adicionar uma pausa no final do arquivo em lotes?
Ed Greaves
32

Basta adicionar isso ao topo do seu arquivo bat:

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

Ele será elevado para administrador e também permanecerá no diretório correto. Testado no Windows 10.

Pai
fonte
1
Testado no Windows 7 e funciona muito bem. Mas você poderia explicar o que faz? Eu não estou familiarizado com arquivos bat.
Sunfloro 5/04/19
1
Ele cria um arquivo VBScript com código que o eleva para o administrador (se você ainda não o é) e executa o arquivo bat novamente, desta vez como administrador.
25919 Sire
1
O que eu estou procurando exatamente! nenhuma alteração extra ou arquivo extra necessário!
MSS
1
o que é o getadmin.vbs?
Kiquenet 12/07/19
4
Adicionar suas duas linhas de código ao meu arquivo em lotes existente é uma boa solução para mim. Eu também precisava adicionar exitao final do meu arquivo em lotes ou seria deixado no prompt. Isso provavelmente ocorre porque o .vbs inicia um segundo prompt de comando.
Ben
10

Se você pode usar um utilitário de terceiros, aqui está um elevateutilitário de linha de comando .

Esta é a descrição de uso:

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog
aforia
fonte
elevate.exepedras!
Sangbok Lee 29/03
8

Você pode usar o comando elevate do nircmd.exe

Referência de Comando NirCmd - elevate

elevate [Program] {Command-Line Parameters}

Apenas para Windows Vista / 7/2008: Execute um programa com direitos de administrador. Quando o [Programa] contém um ou mais caracteres de espaço, você deve colocá-lo entre aspas.

Exemplos:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PS: Eu uso no win 10 e funciona

Dheeraj Bhaskar
fonte
6

converta seu arquivo de lote em .exe com esta ferramenta: http://www.battoexeconverter.com/, então você pode executá-lo como administrador

xxedxx
fonte
2
Lembre-se de que muitos antivírus são super sensíveis aos arquivos exe criados dessa maneira. "converter / criptografar" arquivos em lote dessa maneira, é uma maneira antiga usada por programas maliciosos.
2929 Hamy
Se você analisar esse domínio usando o Symantec - Threat Type: othermalware Motivo da ameaça: Domínio relatado e verificado como servindo malware. Identificado como domínio ou URL malicioso.
Sunil
Má sugestão!
Vlad
6
go get github.com/mattn/sudo

Então

sudo Example1Server.exe
mattn
fonte
6

Eu acho que tenho uma solução para o problema da senha. Esse argumento único é realmente incrível. Ele pede a senha uma vez e nunca mais a pede. Mesmo se você colocá-lo em outro programa, ele não solicitará a senha. Aqui está:

runas /user:Administrator /savecred Example1Server.exe

Anônimo
fonte
4
  1. Minhas experiências indicam que o comando runas deve incluir o domínio do usuário administrador (pelo menos na configuração ambiental da minha organização):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    Se você ainda não conhece o domínio do usuário administrador, execute uma instância do Prompt de Comando como usuário administrador e digite o seguinte comando:

    echo %userdomain%
    
  2. As respostas fornecidas pelo Kerrek SB e Ed Greaves executam o arquivo de destino sob o usuário administrador, mas, se o arquivo for um script de comando (arquivo .bat) ou VB (arquivo .vbs) que tenta operar no login normal ambiente do usuário (como alterar as entradas do registro), talvez você não obtenha os resultados desejados porque o ambiente em que o script é executado será o do usuário administrador, não o usuário de logon normal! Por exemplo, se o arquivo for um script que opera na seção HKEY_CURRENT_USER do registro, o "usuário atual" afetado será o usuário administrador, não o usuário de logon normal.

pstraton
fonte
0

Use a unidade física completa \ path para o arquivo em lotes de destino no atalho Propriedades.

Isso não funciona no Windows 10 se você usar unidades secundárias, como tentei fazer no início ...

Samiamias
fonte