Pergunta

É possível iniciar um navegador da Web a partir de um serviço do Windows? Eu criei um serviço básico em C# e o instalei no perfil de segurança "Localsystem".

O código do serviço parece o seguinte:

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()
        {
        }
    }
}

Quando o serviço funciona, nada acontece. A documentação no Serviço do Windows diz que eles não têm interface do usuário, mas isso significa que o lançamento de um navegador da Web não é possível.

Foi útil?

Solução

É possível apenas no XP e inferior. No Vista, o Windows Services é executado em uma área de trabalho separada completamente. Você terá que ter algo em execução na área de trabalho do usuário para fazer isso.

Escreva um aplicativo com uma janela oculta que começa na inicialização como uma solução alternativa.

Outras dicas

Eu não acho que isso seja possível. Eu sei que se você deseja executar o WATIN (testes funcionais executados em uma instância do navegador) não podem ser executados no meu ambiente de CI, se isso estiver sendo executado como um serviço, mas apenas se ele executar como um aplicativo.

Acredito que isso possa ser feito, mas você precisará fazer um trabalho extra para lidar com o modelo de isolamento do processo (estações de janelas e desktops). Dê uma olhada nesta página: Processar conexão com uma estação de janela. Como você não pode modificar o navegador, pode ser necessário escrever um calço que altere o contexto e, em seguida, invoca o navegador.

Uma solução alternativa é executar seu serviço como um serviço interativo, mas isso está preguiçoso e não funcionará em versões mais recentes do Windows.

Os serviços são explicitamente proibidos de interagir com o usuário. Desde o Vista, isso é aplicado, veja Serviços interativos:

Importante Os serviços não podem interagir diretamente com um usuário a partir do Windows Vista. Portanto, as técnicas mencionadas na seção intitulada usando um serviço interativo não devem ser usadas no novo código.

A solução é separar a parte inteativa em um processo normal lançado quando a sessão do usuário é iniciada (ou seja, um programa de inicialização). Esse processo pode então se comunicar com o serviço por meio de seu IPC de escolha (Memeory compartilhada, tubos de rede, TCP etc). O serviço pode direcionar esse processo para iniciar programas quando necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top