Impedir elevação (UAC) para um aplicativo que não precisa dele [duplicado]


34

Esta pergunta já tem uma resposta aqui:

Tendo migrado recentemente do Vista 32bit para o Windows 7 64bit, um dos meus programas agora requer direitos de administrador.

Eu uso um editor de texto bastante exótico (Crimson Editor). Embora não tenha sido projetado para o Vist / Win7, funcionou bem com o Vista. Porém, no Windows 7, o executável do programa adiciona esse escudo UAC ao seu ícone (mesmo que o sinalizador "Executar como administrador" na guia de compatibilidade não esteja definido) e solicita elevação sempre que eu o executar.

Como o Win7 determina que esse aplicativo semelhante a um bloco de notas precisa de direitos de administrador? Como posso substituir essa falsa heurística?

Respostas:


22

Não, o motivo pelo qual o Crimson Editor faz isso NÃO é porque não está assinado. (E isso não é novidade para o Win7). Isso ocorre porque o manifesto do aplicativo, incorporado ao tempo de compilação, especifica requestedPrivilegeLevel="highestLevel".

De acordo com esta postagem do fórum , os desenvolvedores do Crimson Editor mudaram isso na revisão 237-241. Eles fizeram isso porque o recurso "Adicionar editor carmesim aos menus de contexto de shell" requer privilégios de administrador.

A correção a longo prazo seria para os desenvolvedores do Crimson Editor corrigir seu manifesto de aplicativo. Eles devem se adicionar aos menus de contexto do shell durante a instalação, ou pelo menos informar aos usuários que precisam executar manualmente o aplicativo elevado (o que é fácil de fazer) em vez de exigi-lo.

Para todos os aplicativos com requestedPrivilegeLevel="highestLevel"seus manifestos (use o Manifest View para exibir manifestos de aplicativos), você pode usar o Application Compatibility Toolkit da Microsoft para ajustar o aplicativo com a correção RunAsInvoker, que força o aplicativo a executar com seus tokens de usuário padrão.

Para obter mais informações sobre como usar o Application Compatibility Toolkit, consulte esta postagem sobre como aplicá-lo ao Crimson Editor ou instruções gerais .


11
Como alternativa, você pode substituir o manifesto existente usando a ferramenta mt.exe da linha de comando, que você pode obter gratuitamente com o Visual Studio Express (demorado, mas vale a pena se você encontrar muito esse problema). Observe que a substituição do manifesto incorporado alterará o arquivo .exe, portanto, a) verifique se você possui uma cópia, caso quebre as coisas eb) se foi assinado, quebre a assinatura (mas, nesse caso, parece que você possui já determinou que não está assinado de qualquer maneira).
AdamV

the.d.stro, você é um salva-vidas, está funcionando muito bem.
Phloopy #

11
+1 para "corrigir o aplicativo" e usar o kit de ferramentas AppCompat para corrigir os erros deles.
Ian Boyd

13

Eu descobri que tinha dois aplicativos com esse problema. Um tinha 'update' no nome do arquivo e o outro tinha 'update' no 'FileDecsription'. Eu simplesmente removi a palavra 'atualização' desses dois aplicativos e não mais avisos do UAC. Encontrei as informações em 'Como o UAC funciona' - 'Detecção do instalador' em:

http://msdn.microsoft.com/en-us/library/aa905330.aspx

Que afirma o seguinte:

A detecção do instalador se aplica apenas a:

  • Executáveis ​​de 32 bits
  • Aplicativos sem uma solicitaçãoExecutionLevel
  • Processos interativos em execução como usuário padrão com UAC ativado

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

  • O nome do arquivo inclui palavras-chave como "instalar", "configurar" e "atualizar".
  • Palavras-chave nos seguintes campos de recurso de controle de versão: Fornecedor, Nome da empresa, Nome do produto, Descrição do arquivo, Nome do arquivo original, Nome interno e Nome da exportação.
  • Palavras-chave no manifesto do aplicativo lado a lado incorporado no executável.
  • Palavras-chave em entradas específicas StringTable vinculadas no executável.
  • Atributos-chave nos dados do arquivo de recurso vinculados no executável.
  • Sequências de bytes direcionadas no executável.

  • Nota: As palavras-chave e sequências de bytes foram derivadas de características comuns observadas em várias tecnologias instaladoras.


7

Se você possui o Visual Studio, pode fazer o seguinte:

  1. Abra o Visual Studio como administrador.
  2. Pressione Ctrl-O para abrir um arquivo
  3. Navegue até a pasta onde está o Crimson Editor e abra cedt.exe
  4. O arquivo é aberto usando o editor de recursos e você verá uma árvore com um ramo chamado RT_MANIFEST, expanda isso e clique duas vezes na entrada filho único chamada "1 [English United States]"
  5. Cerca de três quartos do caminho abaixo, na coluna da direita, você verá requestExecutionLevel level = "maximumAvailable", altere "maximumAvailable" para "asInvoker" (NB, o editor é aberto no modo de sobreposição por padrão.
  6. Salve o arquivo e pronto.

HTH

Kevan


4

Há algumas informações sobre as heurísticas aqui: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Um manifesto pode ajudar a controlar algumas dessas coisas.


O MSDN fala sobre "incorporar" o manifesto. Isso não é feito ao compilar o programa? Preciso compilar o Crimson Editor para obter um manifesto assim?
SealedSun

5
Você pode adicionar um arquivo filename.exe.manifest na mesma pasta e o Windows o lerá adequadamente.
Factor Mystic
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.