2014-01-18 1 views
-1

Я пытаюсь написать программу в питоне, который состоит из нескольких частей:Python начиная подпроцесс как администратор, не вызывая процесс будучи админами

  1. конфига процесса утилита
  2. аппаратного монитор
  3. фона

Идея заключается в том, что после установки (используя cx_freeze) аппаратный монитор постоянно работает в фоновом режиме, когда часть совместимого оборудования (с использованием драйвера d2xx для устройства FTDI s) подключен, он проверяет реестр, чтобы узнать, была ли он ранее настроена, если он затем запускает фоновый процесс с серийным номером в качестве аргумента, однако если он не запускает утилиту config.

Однако аппаратный монитор должен запускаться от запуска и, поскольку он только считывает из реестра, не нуждается в полных привилегиях администратора, а фоновый процесс только читает, так что также не нужны прокси-серверы, но утилита config должен иметь возможность писать в реестр и, следовательно, нуждается в администрировании.

Мой вопрос: Как я могу вызвать другую программу из python как admin и с аргументами?

Я рассмотрел использование файла os.startfile, поскольку я установил замороженную программу как требующую администратора, однако я не могу передать ей аргументы.

Я также рассматривал использование подпроцесса.Popen, но я не могу понять, как, или даже если вы можете, поднять его до уровня администратора, так что пока он откроет программу и передаст ей аргументы, которые она не может записать в реестра.

Любая помощь будет оценена, для получения дополнительной информации мой установка является:

  1. для Windows 7 64 бит (но также планируют сделать XP 32 бит)
  2. python2.7.6 (опять же 64 бит, но планируется также сделать 32 бит)
  3. PyUSB-1,6
  4. psutil-1.2.1
  5. cx_freeze-4.3.2

Благодаря

Джеймс

+0

Я попытался модифицировать предложение с этой страницы: http://stackoverflow.com/questions/4645909/python-how-to-start-a-process-with-administrator-permissions подпроцесса .call (['runas', '/ user: Administrator', 'C: /my_program.exe']) Однако, как и в этом вопросе, он подсказал мне пароль (который мне нужно избегать) и отклонил его, даже когда Я набрал его. –

+0

Я также должен добавить, когда он начнет другой процесс, я не возражаю против его запроса #, то есть поля UAC, но я должен иметь возможность создавать его с повышенными привилегиями и аргументами, которые я похоже, не может найти ни одного примера ... –

ответ

1

После долгих охоты я нашел решение, я попытался с помощью:

  1. os.popen
  2. os.startfile
  3. subprocess.call
  4. подпроцесс .Popen

и, наконец, os.system

как os.system по существу то же самое, что вводить в командной строке или помещать аргументы в пакетный файл, а затем выполнять его, запрашивая разрешения по умолчанию для исполняемых файлов, единственным недостатком этого является что я получаю окно оболочки, когда появляется окно UAC, которое остается до тех пор, пока открытая программа не будет закрыта.

проблема с другими решениями являются:

1 - проходит только права доступа к вызывающему приложению, независимо от того, что требует вызываемая приложения.

2 - запрашивает более высокий уровень разрешений, но без механизма передачи аргументов

3 - такой же, как 1

4 - такой же, как 1

если кто-нибудь может рекомендовать механизм предотвращения оболочки окно было бы оценено.

Джеймс

 Смежные вопросы

  • Нет связанных вопросов^_^