Ok, a razão não funciona no modelo de segurança do Windows Vista e mais recente.
Uma conta no grupo de administradores ainda executa tudo que não é explicitamente elevado como um usuário limitado. A exceção é a conta Administrator
, que executa tudo elevado. Por esse motivo, geralmente é considerado ruim usar como sua conta de login e é normalmente desativado.
Você pode ativá-lo e, em seguida, runas
invocar como essa conta. Isso apresenta alguns problemas - agora você está executando com o ambiente de um usuário diferente, que pode ter diferentes variáveis de ambiente definidas. 1
A melhor maneira de fazer isso seria realmente elevar como seu usuário atual via UAC. Infelizmente, o prompt de comando padrão não inclui esse recurso, mas os programas de terceiros e o PowerShell e o WSHell (VBScript) integrados podem fazê-lo.
Aproveitando a minha outra resposta , você pode chamar o comando do PowerShell diretamente com powershell -c
:
powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts
que basicamente diz ao PowerShell para executar o seguinte ( start
é aliased para Start-Process
):
Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts
O truque aqui é passar o verbo runas
, acionando o UAC.
Nem Start-Process -Verb runas
nem o padrão cmd runas
passarão a corrente diretório de trabalho , então sempre use o caminho completo em qualquer comando que você elevar dessa maneira.
Observe também que alguns argumentos como -c
podem colidir com Start-Process
argumentos, então a maneira mais segura é:
powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"
1 Nota: isso só se aplica às variáveis de ambiente do usuário . Variáveis de ambiente definidas em um processo pai não são repassados pelo UAC ! Isso também se aplica a runas
, e é ainda pior porque você não terá nem mesmo as versões corretas do usuário.