2013-04-04 4 views
0

Я был в состоянии создать службу Windows с помощью Python и следующий этот учебник: http://ryrobes.com/python/running-python-scripts-as-a-windows-service/Есть ли способ сделать интерактивную службу в Windows 7 (Python)?

Однако я пытался реализовать сценарий в этом, что открывает новые перспективы почты через COM. Этот скрипт работает вне службы, но я, кажется, проследили проблему назад к этой линии:

obj = win32com.client.Dispatch("Outlook.Application")

на глядя в это дальше, кажется, что с UAC в Vista, и Windows 7, пришел блокирование услуг взаимодействуя с пользователями. Дополнительная информация - http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx

Так что мой вопрос: что это лучший способ обойти это? У меня есть скрипт python, который работает, когда я уверен, чтобы включить его, но оставить файл пакета/cmd в каталоге запуска кажутся неправильными.

Заранее благодарим за любые идеи!

Windows 7 x64 (. Я также связан с политикой Enterprise Group У меня есть только права локального администратора)

+0

Зачем вам нужен сервис Windows? У вас нет приложения, которое запускается при регистрации пользователя? Вы можете настроить службу для взаимодействия с рабочим столом, но ее можно заблокировать с помощью ключа реестра NoInteractiveServices (на моем ПК с Windows 8 она установлена ​​в 1). –

+0

Мне не нужен «сервис Windows», но быть в состоянии «установить и забыть» было бы неплохо, и вам не нужно беспокоиться о том, чтобы убедиться, что программа запущена. Кроме того, это учебное упражнение для меня, чтобы получить обслуживание и запустить журнал, журнал событий и т. Д. – TheDavil

+0

Интерактивные услуги все больше и больше обескуражены. Вы также можете написать службу Windows плюс другое «обычное» интерактивное приложение, которое связывается с этой услугой (используя различные механизмы, HTTP, COM, IPC, Socket и т. Д.). В случае Outlook это может быть надстройка надстройки, которая регулярно проверяет службу на что-то делать. –

ответ

0

Ваш «подробнее» ссылка описывает два метода, которые могли бы, возможно, быть достижимы:

  • «Отображение диалогового окна в сессии пользователя с помощью функции WTSSendMessage»
  • «Создать отдельное скрытое приложение GUI и использовать функцию CreateProcessAsUser, чтобы запустить приложение в контексте интерактивного пользователя. ...»

Но как упоминалось в комментарии theseanswers и Simon Mourier, наиболее простым решением является, вероятно, сервис + background-process-in-user-session + IPC.

Кроме того, если вы пытаетесь создать новое электронное письмо через Outlook, вам, вероятно, понадобится/нужно что-то запущенное в сеансе пользователя, чтобы иметь надлежащий контекст.

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