2010-08-04 13:49:40 +0000 2010-08-04 13:49:40 +0000
128
128

Forçar um programa a correr * sem* privilégios de administrador ou UAC?

Existe alguma forma de forçar um programa que normalmente requer privilégios de administrador (via UAC) a correr sem eles? (i.e.: sem prompt UAC e ** sem acesso a todo o sistema**.)

Adicionado: Sem modificar o executável em si.


Apesar da resposta do James, encontrei algumas formas de o fazer:

  1. Ao modificar o executável posso remover a entrada trustInfo do manifesto (ou o manifesto por completo, para poder utilizar um externo), permitindo que o programa comece sem UAC. Infelizmente isto modifica o executável, pelo que sai pouco depois devido a um teste de soma de controlo interno.
  2. Utilizando o Process Explorer posso lançá-lo como um Utilizador Limitado. No entanto isto parece limitá-lo significativamente mais do que eu gostaria (corre como o IE Modo Protegido e por isso pode aceder significativamente menos do que o meu utilizador padrão não-elevado pode).

Respostas (9)

76
76
76
2012-07-18 15:20:44 +0000
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\"\""

Guarde este texto em <name_of_file>.reg e adicione-o ao Registo do Windows. (Duplo clique sobre ele deve fazer o truque.)

Depois, clique com o botão direito do rato na aplicação que pretende executar sem privilégios administrativos e seleccione “Executar sem elevação de privilégios”.

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

57
57
57
2015-10-02 11:27:02 +0000

Guardar para nonadmin.bat:

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

Agora pode arrastar e largar programas para isto para os executar sem a ajuda de admin.

Isto não requer privilégios de admin como a alteração da chave de registo requer. Também não vai desorganizar o menu de contexto.

Baseado na resposta


Update: Deverá agora trabalhar com programas que tenham espaços no nome também.

35
35
35
2012-01-05 08:15:03 +0000

Espero não chegar demasiado tarde à festa, mas estava à procura de uma pergunta semelhante e, sem ver aqui uma resposta, descobri que o builtin RunAscommand do Windows, quando executado como administrador, pode fazer isso com o /trustlevel switch.

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.

Isto funcionou no meu caso. Ironicamente, iniciar um programa explicitamente sem elevação exige um prompt de comando elevado. Go figure. :) Espero que isso o ajude.

19
19
19
2016-09-09 20:16:13 +0000

Se tem uma aplicação específica que pretende executar sempre sem UAC, pode direccioná-la para o Registo (adicionar o texto a um ficheiro REG e importá-lo para o Registo):

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 ou alteração alternativa à interacção do utilizador.

A Microsoft chama a este processo adicionando o RunAsInvoker “Compatibility Shim” .

4
4
4
2019-01-25 11:54:23 +0000

Se é um ficheiro de configuração (instalação) exe que requer privilégio de administração, há um truque para o executar sem acesso elevado:

Se o nome do ficheiro contém palavras como setup ou install, corre-o forçosamente com acesso elevado mesmo que não necessite de acesso elevado:

Se o ficheiro . exe tem um manifesto no ficheiro, estas heurísticas de elevação não se aplicam.

Por exemplo, se o manifesto indicar que o exe não necessita de elevação, mesmo incluindo qualquer uma destas palavras no nome do ficheiro não o fará correr tão elevado.

Outra palavra-chave é patch como referido por Mgamerz nos comentários.

Isto está documentado nos documentos UAC (User Account Control):

Installer detection detecta ficheiros de configuração, o que ajuda a evitar que as instalações sejam executadas sem o conhecimento e consentimento do utilizador.

Installer detection aplica-se apenas a:

  • ficheiros executáveis de 32 bits.

  • Aplicações sem um atributo de nível de execução solicitado.

  • Processos interactivos executados como um utilizador standard com UAC activado.

Antes de um processo de 32 bits ser criado, os seguintes atributos são verificados para determinar se é um instalador:

3
3
3
2011-05-18 01:05:06 +0000

Resolvi este problema hoje utilizando o kit de ferramentas de personalização de aplicações MS.

Segui as instruções num artigo técnico da república .

Basicamente:

1) Obtém o kit de ferramentas do MS aqui .

2) Clique em Fixar

3) Escolha a opção RunAsInvoker

4) Clique com o botão direito do rato na opção Fixar e escolha Instalar

2
2
2
2013-07-21 02:56:41 +0000

Enquanto na 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 por completo, para poder utilizar um externo), permitindo que o programa comece sem UAC. Infelizmente isto modifica o executável, pelo que sai pouco depois devido a um teste de checksum interno.

Consegui modificar um ficheiro .manifest externo para o software que estava a utilizar e alterar

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

Acontece que o software que estava a utilizar não necessitava realmente de direitos de administrador, pelo que consegui executá-lo numa conta Standard User sem UAC ou passwords de administrador. Obrigado!

-2
-2
-2
2012-04-20 04:28:43 +0000

Resolvi este problema alterando as permissões da pasta que continha o programa.

Adicionei cada utilizador que irá executar esse programa e dei-lhes privilégios de “controlo total”. Isso resolveu o problema e deixei o “run as admin” desmarcado.

Não tenho quaisquer preocupações de segurança para os utilizadores que irão executar o programa.

-5
-5
-5
2010-08-04 14:09:46 +0000

Não, se um programa requer a UAC então está a tentar aceder a algo fora da sua caixa de areia. O programa não irá funcionar correctamente sem o acesso elevado.

Se apenas se quiser livrar da notificação, pode desactivar o UAC.

Desactivar o UAC no Windows Vista: Iniciar, digite “utilizador”. Clique em “Contas de Utilizador”. Na janela que aparece, clique em “User Account Control Settings” e depois em “Disable UAC.

Disable UAC on Windows 7: Start, digite "user”. Clique em “User Account Control Settings” (Definições de Controlo da Conta de Utilizador). Arraste a barra de selecção até ao fundo para “Nunca Notificar”.