Questão Forçar um programa a executar * sem * privilégios de administrador ou UAC?


Existe alguma maneira que eu possa forçar um programa que normalmente requer privilégios de administrador (via UAC) para executar sem eles? (isto é: nenhum prompt do UAC e sem acesso ao sistema.)

Adicionado: sem modificar o próprio executável.


Apesar da resposta de James, eu encontrei algumas maneiras que podem quase ser feito:

  1. Ao modificar o executável, posso remover o trustInfo entrada do manifesto (ou o manifesto totalmente, então eu posso usar um manifesto externo), permitindo que o programa inicie sem o UAC. Infelizmente, isso modifica o executável, portanto, ele sai logo após devido a um teste de soma de verificação interna.
  2. Usando o Process Explorer, posso iniciá-lo como um usuário limitado. No entanto, isso parece limitá-lo significativamente mais do que eu gostaria (ele é executado como o Modo Protegido IE e, portanto, pode acessar significativamente menos do que o meu usuário padrão sem elevação pode).

102


origem


Você especifica não modificar o executável, mas modificar o .exe é uma das suas tentativas? - cutrightjm
@ ekaj eu só especifiquei que depois de Eu descobri que não funcionaria;) - Andrew Russell
Você poderia, talvez, especificar o programa, mesmo que você não o use mais? Isso pode ajudar as pessoas a saberem o que está tentando acessar, o que requer privilégios de administrador - cutrightjm
@ ekaj Infelizmente não. No entanto, não é especialmente relevante: o UAC é acionado por um programa que solicita a elevação durante a criação do processo (a maneira usual - como neste caso - é com um manifesto). Depois que um processo é iniciado, ele não pode alterar seu status de elevação - não importa quais recursos restritos ele tente acessar. - Andrew Russell
Se um programa não tiver manifesto e se recusar a ser executado sem privilégios de administrador, provavelmente é devido à Detecção do Instalador do UAC. Eu postei esta pergunta e misha256 tem uma boa solução. Eu testei e posso confirmar que funciona. superuser.com/questions/857616/… Fiz algumas pesquisas e descobri que não há motivos para a Detecção do Instalador existir. Observe que, se os privilégios de administrador forem devidos a uma entrada trustinfo em um manifesto, obviamente isso não funcionará. - user1258361


Respostas:


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without privilege elevation"

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

Salve este texto em <name_of_file>.reg e adicioná-lo ao Registro do Windows. (Dê um duplo clique nele deve fazer o truque.)

Depois, clique com o botão direito do mouse no aplicativo que você deseja executar sem privilégios administrativos e selecione "Executar sem elevação de privilégio".

Em alguns casos - pequena quantidade de 0,1% dos programas pode perguntar duas vezes sobre o prompt do UAC.


61



Eu costumava usar o shim do Application Compatibility Toolkit, mas isso era muito trabalho para cada executável e lixo deixado no registro para cada arquivo também. Este método funciona e eu gosto muito melhor. - Ben Voigt
Aceitando isso como parece ser o método mais direto, e eu (finalmente!) foi capaz de verificar isso. Também tem a propriedade muito agradável de ser trivialmente utilizável como uma linha de comando única (remova a " e depois vire \" para dentro "). - Andrew Russell
@Vom - Você conhece uma maneira fácil de obter programas antigos que são solicitados várias vezes? Obrigado! - Derek
Eu tenho o mesmo problema que @Derek, o aplicativo parece estar constantemente pedindo novamente o UAC, eu não confio nele com acesso de todo o sistema, mas eu preciso da sua funcionalidade. - Gizmo
@ jpmc26 eu acho que o /min é um erro. A solução funciona exatamente da mesma forma sem ela. Vom deve ter misturado cmd e start comuta. Parece que cmd.exe não se queixa de interruptores errados. Experimentar cmd /whatever, por exemplo. - cdlvcdlv


Salvar para nonadmin.bat:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Agora você pode arrastar e soltar programas para executá-los sem administração.

Isso não requer privilégios de administrador, pois a alteração dessa chave de registro é necessária. Além disso, você não vai bagunçar o menu de contexto.

Baseado no Vom's responda


Atualizar: Agora deve trabalhar com programas que tenham espaços no nome também.


34



Eu tentei em alguns programas que exigem acesso em minhas unidades e não poderia detectá-los ou não funcionou em primeiro lugar: / (rufus rufus.akeo.ie por exemplo) - keinabel
@keinabel Isso provavelmente é porque eles realmente precisavam do admin para funcionar. Este script é para programas que exigem privilégios de administrador sem realmente fazer algo que o exija. O acesso bruto às unidades é uma coisa típica do administrador. - Hjulle
Muito arrumado! Conseguiu instalar o XAMPP usando este método. - Krishnaraj
Isso não parece estar funcionando para mim para quaisquer executáveis ​​no diretório "C: \ Program Files \ ...". Eu recebo um Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again. Eu tentei este comando manualmente várias vezes com pequenas variações e sem sorte. Alguma ideia? - Jake Smith
Eu tive o mesmo problema com a localização do arquivo estar em uma pasta com espaços. Resolveu a remoção de algumas aspas duplas: cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% 1" - ragnar


Espero não estar muito atrasado para a festa, mas eu estava procurando por uma pergunta semelhante e sem ver uma resposta aqui eu descobri que o Windows embutido RunAscomando, quando executado como administrador, pode fazer isso com /trustlevel interruptor.

RUNAS /trustlevel:<TrustLevel> program

/showtrustlevels  displays the trust levels that can be used
                  as arguments to /trustlevel.
/trustlevel       <Level> should be one of levels enumerated
                  in /showtrustlevels.

Isso funcionou no meu caso. Ironicamente, iniciar um programa explicitamente sem elevação requer um prompt de comando elevado. Vai saber. :) Espero que ajude você.


31



Eu posso confirmar que isso não funciona. Eu apenas testei e recebi um erro: "RUNAS ERROR: Não é possível executar - (nome do programa aqui). A operação solicitada requer elevação". - user1258361
@ user1258361 você tem que executar este comando de prompt elevado, assim como eu escrevi em negrito ... - Mxx
Não parece exigir um prompt elevado no Windows 7 ... - SamB
Testado com prompt elevado, linha de comando usada runas / trustlevel: 0x20000 (programa), programa executado como administrador de qualquer maneira. Para referência, 0x20000 é usuário básico. - user1258361
requer um prompt de comando elevado...Claro que sim. Caso contrário, você é já sem direitos de administrador e qualquer processo que você iniciar também não terá. - Twisty Impersonator


Se você tiver um aplicativo específico que deseja sempre executar sem o UAC, você pode direcioná-lo com o Registro (adicione o texto a um arquivo REG e importe-o para o Registro):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

Ao contrário desta resposta, esta solução não requer nenhum clique alternativo ou alteração na interação do usuário.

Microsoft chama esse processo adicionando o RunAsInvoker  "Compatibilidade Shim".


9



A resposta para uma pergunta diferente, porém relacionada forneceu a inspiração para essa resposta. - palswim
Muito obrigado! Esta foi a única coisa que funcionou para mim! Eu tinha um aplicativo que estava sendo chamado a partir do menu de contexto do Windows, e ele estava sempre chegando como administrador, apesar de ser chamado corretamente de qualquer outro lugar. Após essa correção, o aplicativo começou a ser chamado corretamente. - user
Obrigado. A outra solução funcionou bem para mim, mas é bom ver como o mecanismo subjacente usado pelos shims é aplicada para um executável. - 0xC0000022L


Eu resolvi esse problema hoje usando o kit de ferramentas de personalização de aplicativos MS.

Eu segui as instruções em um artigo da república de tecnologia: http://www.techrepublic.com/blog/window-on-windows/selectively-disable-uac-for-your-trusted-vista-applications/635

Basicamente:

1) você recebe o takeit do MS Aqui .

2) Clique em Corrigir

3) Escolha o RunAsInvoker opção

4) Clique com o botão direito na correção e escolha Instalar


2



Sua resposta faz exatamente o oposto do efeito desejado. A pergunta original era como forçar um aplicativo que pede privilégios elevados para executar sem elevar. Sua resposta ainda usa o UAC, mas apenas desativa o prompt. Essa é uma resposta errada para essa pergunta. - Mxx
@mxx na verdade não. Se o usuário atual for limitado (ou se você tiver o UAC habilitado), o processo será iniciado com privilégios limitados. - LogicDaemon
@LogicDaemon Se você realmente leu o artigo, verá que ele explica que, se você seguir essas etapas, você executará um aplicativo como administrador sem prompt do UAC. Isso é o oposto do que o OP pediu. - Mxx
@mxx não. Leia technet o que o RunAsInvoker realmente faz. Este é, de fato, o que o topicstarter pediu, embora isso só funcione para aplicativos mais antigos. - LogicDaemon
Contanto que o Explorer, um cmd não administrativo ou qualquer outro processo padrão seja o pai, o RunAsInvoker será executado com os mesmos direitos limitados. (O Explorer é executado por padrão, senão nunca pediria para você elevar para excluir um arquivo.) Na verdade, parece funcionar mesmo com novos aplicativos. RunAsInvoker significa que herda exatamente o mesmo token ACL. - SilverbackNet


Eu consertei esse problema indo mudando as permissões na pasta que continha o programa.

Eu adicionei cada usuário que irá executar esse programa e deu-lhes privilégios de "controle total". Isso resolveu o problema e deixei o "run as admin" desmarcado.

Não tenho preocupações de segurança para os usuários que executarão o programa.


0





Enquanto em sua pergunta, Andrew afirmou que o seguinte não funcionava bem:

Ao modificar o executável, posso remover a entrada trustInfo do   manifesto (ou o manifesto inteiramente, então eu posso usar um externo),   permitindo que o programa inicie sem o UAC. Infelizmente isso modifica   o executável, portanto, ele sai logo após devido a uma soma de verificação interna   teste.

Consegui modificar um arquivo de manifesto externo para o software que estava usando e alterar

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

para

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

Acontece que o software que eu estava usando realmente não exigia direitos de administrador, então eu era capaz de executá-lo em uma conta de usuário padrão sem UAC ou senhas de administrador. Obrigado!


0





Não, se um programa exigir o UAC, ele tentará acessar algo fora de sua sandbox. O programa não será executado corretamente sem o acesso elevado.

Se você quer apenas se livrar da notificação, você pode desabilitar o UAC.

Desative o UAC no Windows Vista: Clique em Iniciar, digite "usuário". Clique em "Contas de Usuário". Na janela que aparece, clique em "Configurações de Controle de Conta de Usuário" e depois em Desligar o UAC.

Desativar o UAC no Windows 7: Iniciar, digite "user". Clique em "Configurações do Controle de Conta de Usuário". Arraste a barra de opções até a parte inferior para "Nunca notificar".


-3



Desativar o UAC não é o que estou tentando alcançar. Além disso, sua descrição de como o UAC funciona está correta apenas no sentido geral. É possível que um programa solicite o UAC quando ele não precisar dele estritamente. E o UAC acontece antes do início de um programa - uma vez que ele é executado, se ele ultrapassar suas permissões, ele simplesmente receberá erros de permissão negada. - Andrew Russell
Semântica à parte, você não pode "desativar" as notificações do UAC para um programa específico enquanto ainda limita o acesso. - James Watt
James: Na verdade - parece que você pode - eu atualizei minha pergunta. - Andrew Russell
Curta de modificar o código do programa em si, eu estaria interessado em saber de uma solução de trabalho, se você encontrar um. - James Watt