Pergunta

É possível programaticly executar compilado Python (comiled via py2exe) como administrador no Vista?

Alguns mais esclarecimentos:
Eu escrevi um programa que modifica o arquivo hosts do Windows (C: \ Windows \ System32 \ drivers \ etc \ hosts) em Vista o programa não será executado e irá falhar com uma exceção a menos que você clique com o botão direito e executar como administrador, mesmo quando a usuário tem privilégios de administrador, ao contrário do XP, onde ele será executado se o usuário tem direitos de administração, então eu preciso de uma maneira para elevá-lo para os privilégios corretos programaticly.

Foi útil?

Solução

Você quer dizer que você deseja que o Windows para o prompt de elevação quando o programa é executado? Isto é controlado pela adição de um manifesto UAC aos recursos do EXE. Este blog explica como criar o manifesto e como compilá-lo em um arquivo .RES.

Eu não sei o que instalações py2exe tem para a incorporação de arquivos .RES personalizados, assim você pode precisar usar a ferramenta MT.exe do Platform SDK para incorporar o manifesto em seu programa. não MT.exe não precisa de arquivos .RES; ele pode mesclar o arquivo manifest diretamente.

Outras dicas

Seguindo os exemplos de Python2x\Lib\site-packages\py2exe\samples\user_access_control basta adicionar uac_info="requireAdministrator" para console ou janelas dict:

windows = [{
    'script': "admin.py",
    'uac_info': "requireAdministrator",
},]

Na sequência comentário de Roger Lipscombe, eu usei um arquivo de manifesto em py2exe sem qualquer conhecimento real do que eu estava fazendo. Portanto, este pode trabalho:

# in setup.py
# manifest copied from http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx
manifest = '''
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
       <asmv3:trustInfo xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
         <asmv3:security>
           <asmv3:requestedPrivileges>
             <asmv3:requestedExecutionLevel
               level="asInvoker"
               uiAccess="false" />
           </asmv3:requestedPrivileges>
         </asmv3:security>
       </asmv3:trustInfo>
     </assembly>
'''

setup(name='MyApp',
      #...
      windows=[ { #...
                  'other_resources':[(24, 1, manifest)],
                 }]
     )

Você pode precisar fazer alguma mexer embora ..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top