Запуск веб-браузера из службы Windows - PullRequest
1 голос
/ 25 февраля 2010

Можно ли запустить веб-браузер из службы Windows? Я создал базовый сервис в C # и установил его в профиле безопасности «LocalSystem».

Код услуги выглядит следующим образом:

namespace Bootloader
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            string target = "http://www.microsoft.com";
            System.Diagnostics.Process.Start(target);
        }

        protected override void OnStop()
        {
        }
    }
}

Когда служба запускается, ничего не происходит. В документации по службе Windows говорится, что у них нет пользовательского интерфейса, но означает ли это, что запуск веб-браузера невозможен.

Ответы [ 4 ]

5 голосов
/ 25 февраля 2010

Это возможно только в XP и ниже. В Vista службы Windows полностью работают на отдельном рабочем столе. Для этого вам нужно что-то запустить на рабочем столе пользователя.

Напишите приложение со скрытым окном, которое запускается при запуске в качестве обходного пути.

0 голосов
/ 25 февраля 2010

Сервисам явно запрещено взаимодействовать с пользователем. Поскольку в Vista это применяется, см. Интерактивные службы :

Важно Услуги не могут напрямую взаимодействовать с пользователем с Windows Vista. Поэтому методы упоминается в разделе под названием Использование Интерактивная служба не должна быть используется в новом коде.

Решение состоит в том, чтобы разделить интерактивную часть на обычный процесс, который запускается при запуске сеанса пользователя (т. Е. Программа запуска). Затем этот процесс может взаимодействовать со службой через выбранный IPC (общая память, сетевые каналы, TCP и т. Д.). Служба может направить этот процесс на запуск программ при необходимости.

0 голосов
/ 25 февраля 2010

Я полагаю, что это можно сделать, но вам придется проделать дополнительную работу, чтобы разобраться с моделью изоляции процессов (оконные станции и рабочие столы). Взгляните на эту страницу: Обработка соединения с оконной станцией . Поскольку вы не можете изменить браузер, вам может потребоваться написать шайбу, которая изменяет контекст, а затем вызывает браузер.

Обходной путь - запустить службу как интерактивную службу, но это устарело и не будет работать в более новых версиях Windows.

0 голосов
/ 25 февраля 2010

Я не думаю, что это возможно. Я знаю, что если вы хотите запустить Watin (функциональные тесты, которые выполняются в экземпляре браузера), его нельзя запустить из моей среды CI, если он работает как служба, но только если он работает как приложение.

...