Запуск скомпилированного питона (py2exe) от имени администратора в Vista

StackOverflow https://stackoverflow.com/questions/195109

Вопрос

Можно ли программно запускать скомпилированный Python (скомпилированный через py2exe) от имени администратора в Vista?

Еще несколько уточнений:
Я написал программу, которая изменяет файл хостов Windows (c: \ Windows \ system32 \ drivers \ etc \ hosts) в Vista, программа не запустится и завершится с ошибкой, за исключением случаев, когда вы щелкаете правой кнопкой мыши и запускаете от имени администратора, даже когда У пользователя есть права администратора, в отличие от XP, где он будет работать, если у пользователя есть права администратора, поэтому мне нужен способ повысить его до нужных прав программно.

Это было полезно?

Решение

Вы хотите сказать, что вы хотите, чтобы Windows запрашивала повышение прав при запуске вашей программы? Это контролируется путем добавления манифеста UAC к ресурсам EXE. Эта запись в блоге объясняет, как создать манифест и как скомпилировать его в файл .RES.

Я не знаю, какие возможности есть у py2exe для встраивания пользовательских файлов .RES, поэтому вам может понадобиться использовать инструмент MT.EXE из Platform SDK для встраивания манифеста в вашу программу. MT.EXE не нуждается в файлах .RES; он может объединить файл .manifest напрямую.

Другие советы

Следуя примерам из Python2x \ Lib \ site-packages \ py2exe \ samples \ user_access_control , просто добавьте uac_info = " requireAdministrator " в консоль или в Windows dict:

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

После комментария Роджера Липскомба я использовал файл манифеста в py2exe без каких-либо реальных знаний о том, что я делал. Так что может работать:

# 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)],
                 }]
     )

Возможно, вам придется немного поиграться ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top