Локальный IIS - Com Interop iTunes - PullRequest
       21

Локальный IIS - Com Interop iTunes

0 голосов
/ 12 октября 2011

Небольшой вопрос, кто-нибудь мог управлять iTunes через любое локальное веб-развертывание?Наиболее предпочтительным является использование размещенной службы IIS WCF?

Я пробовал на своей Windos 7 с IIS7.5 и когда я установил «Модель процесса - Удостоверение» на «Локальная система» в приложении IIS, содержащем службу WCF,Я вижу, как iTunes.exe появляется в диспетчере задач.Но iTunes не «оживает» - никакой визуальной оболочки, и хотя объект iTunesApp инициализирован в моем коде службы WCF, выполнение каких-либо действий с ним не будет работать.

Сторона не работает, работает тот же сервисчерез режим отладки Visual Studio 2010, все работает просто замечательно!

  • ОБНОВЛЕНИЕ * Я пытался связаться с iTunes через мой телефон с Windows, и я думал обойти это с веб-сайтом / службой ... нос новым обновлением Mango мы можем сделать родные TCP-сокеты на телефоне!Так что я попробую этот маршрут.

Ответы [ 2 ]

0 голосов
/ 12 октября 2011

Причиной того, что служба не отображает никаких окон пользовательского интерфейса, является Session Isolation .Ваша служба (процесс пула приложений IIS) работает в сеансе 0. Ваш рабочий стол подключен к сеансу 1 (или некоторому другому номеру, если на этом компьютере зарегистрировано более одного пользователя).

Существует несколько обходных путей, позволяющих службам отображать пользовательский интерфейс:
1. Вы можете пометить службу с параметром «Разрешить службе взаимодействовать с рабочим столом».Это работает только для служб, которые работают как локальная система.Этот параметр устарел, его следует использовать только для совместимости с устаревшими службами.
2. Служба может запускать промежуточный процесс в сеансе пользователя и связываться с ним.

Если вы не хотите взаимодействовать с iTunes и хотите запускать его только во время сеанса пользователя, вам нужно сделать следующее:

  • Получить имя станции Windows пользователябежит.Для этого вы можете использовать API служб терминалов Windows .Вам нужно проявить творческий подход, чтобы выяснить, какой сеанс пользователя в данный момент активен (если их несколько).Возможно, вы также захотите запросить маркер безопасности пользователя, чтобы процесс запускался как пользователь, а не как локальная система.
  • Вызовите CreateProcessAsUser и передайте структуру STARTUPINFO.Установите поле lpDesktop в STARTUPINFO, чтобы указать на оконную станцию, которую вы определили.
0 голосов
/ 12 октября 2011

Причина, по которой это работает при отладке в Visual Studio 2010, заключается в том, что вы запускаете VS под своим логином, и у вашего логина есть видимый рабочий стол, с которым iTunes может взаимодействовать.

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

...