Открытие IE через WCF - PullRequest
       8

Открытие IE через WCF

3 голосов
/ 05 февраля 2012

У меня есть служба WCF, размещенная в службе Windows.

Эта служба WCF имеет один метод, и в этом методе у меня есть одна важная строка:

 Process Browser = Process.Start("iexplore.exe", hostUrl);

Я устанавливаю службу Windowsкак локальная система, но когда я пытаюсь вызвать этот метод, кажется, что все выполняется, кроме одной важной строки ... и IE не открылся.

Я хотел бы добавить, что сам методне в самом сервисе, а в одном из сервисных dll-ссылок

Есть идеи почему?

Ответы [ 3 ]

4 голосов
/ 05 февраля 2012

http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/63a7d1ec-7077-489a-a250-f7422f04317b

", чтобы служба действительно отображала пользовательский интерфейс, вам нужно настроить службу в управлении компьютером, чтобы она могла взаимодействовать с рабочим столом. В окне служб вуправление компьютером, перейдите в свойства вашего сервиса и на вкладке «Вход в систему» ​​установите флажок «Разрешить сервису взаимодействовать с рабочим столом» «

3 голосов
/ 06 февраля 2012

С тех пор как Windows Vista MS добавила много изменений, связанных с безопасностью esp. в области, что службы Windows могут / не могут сделать. Все, что «похоже на рабочий стол» (печать, доступ к сетевым ресурсам, использование Office Interop и т. Д.), Становится все труднее и труднее.

Вы должны переосмыслить свой дизайн, поскольку IMHO любой «серверный процесс» (например, служба WCF) может быть доступен параллельно несколькими запросами, и поэтому НЕ следует использовать процессы, НЕ предназначенные для такого типа взаимодействия ... что произойдет, если ваш веб-сервис запустит несколько экземпляров IE таким образом? Будет ли IE вести себя так, как вам нужно / ожидать?

ЕСЛИ вы действительно ДОЛЖНЫ сделать это так, как вам нужно

  • обычный рабочий стол с хостом службы WCF

ИЛИ

  • два процесса, один из которых является вашей службой Windows, а другой работает как обычный рабочий стол, работающий с IE ... эти два процесса взаимодействуют через IPC
1 голос
/ 06 февраля 2012

Под каким пользователем работает служба? Попробуйте запустить его под текущим вошедшим пользователем с правами взаимодействия с рабочим столом и посмотрите, поможет ли это.

В общем, не очень хорошая идея иметь сервисы, запускающие процессы GUI. Например, что, если никто не вошел в систему. Что делать, если многие люди вошли в систему? Должен ли он открываться во всех сеансах ... и т. Д. Рассматривали ли вы возможность предоставления простой (например, Net.NamedPipes) конечной точки вашей службы и написание небольшого клиентского интерфейса для взаимодействия с ним?

...