A seleção de “Executar como administrador” no menu de contexto do botão direito funciona, mas configurá-lo na guia de compatibilidade não

3

Eu preciso do arquivo

C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VSLauncher.exe 

para ser executado automaticamente como administrador, caso contrário não consigo abrir arquivos * .sln do Windows Explorer.

Eu já havia resolvido esse problema marcando a caixa de seleção "Executar como administrador" na guia de compatibilidade da propriedade de arquivo, mas isso não funciona mais. Abrir VSLauncher.exe não faz nada, mas clicar com o botão direito e selecionar "Executar como Administrador" faz! Todos os meus devenv.exe estão configurados para serem executados como administradores e funcionam como esperado.

É importante notar que isso quebrou após algumas atualizações, possivelmente o Visual Studio 2010 Service Pack 1.

    
por Evil Pigeon 17.05.2011 / 08:44

1 resposta

3

De Obtendo o Visual Studio 2010 SP1 para executar elevado ao iniciar arquivos .sln :

After some research, I found that the reason for Windows ignoring my compatibility setting was that VSLauncher.exe now had a manifest embedded, which contained the following fragment:

<requestedPrivileges>
   <requestedExecutionLevel level="asInvoker" uiAccess="false">
   </requestedExecutionLevel>
</requestedPrivileges>

So, VSLauncher.exe now specified that it always wanted to be run at the same execution level as its invoker. And, since of course the program must know better than the user, this caused Windows to ignore my own execution level setting.

And now, to the solution. Since Windows wouldn’t let me override what the program said it wanted, I needed to override what the program said it wanted.

To do that, I used the Manifest Tool that comes with the Windows SDK (and thus with Visual Studio):

mt -inputresource:"VSLauncher.exe" -out:VSLauncher.exe.manifest

This command extracted the manifest from VSLauncher.exe into a file called VSLauncher.exe.manifest. I then edited the manifest to request the desired execution level:

<requestedPrivileges>
   <requestedExecutionLevel level="requireAdministrator" uiAccess="false">
   </requestedExecutionLevel>
</requestedPrivileges>

Then, I could write back the manifest:

mt -outputresource:VSLauncher.exe -manifest VSLauncher.exe.manifest

With the desired result.

One note of caution: Please make a backup copy of VSLauncher.exe before manipulating the manifest.
And perform at your own risk.

    
por 26.05.2011 / 21:11