Domanda

E 'possibile avviare un browser web da un servizio di Windows? Ho creato un servizio di base in C # e installato sotto il profilo della sicurezza "LocalSystem".

Il codice per il servizio si presenta come segue:

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 il servizio viene eseguito, non succede nulla. La documentazione sul servizio di Windows dire che non hanno alcuna interfaccia utente, ma vuol dire lanciare un browser Web non è possibile.

È stato utile?

Soluzione

E 'possibile solo in XP e inferiore. In Vista, Windows Services eseguito su un desktop completamente separata. Dovrete avere qualcosa in esecuzione nel desktop dell'utente per raggiungere questo obiettivo.

Scrivi un app con una finestra nascosta che inizia all'avvio come una soluzione.

Altri suggerimenti

Non credo che questo sia possibile. So che se si desidera eseguire Watin (test funzionali che vengono eseguiti in un'istanza del browser) non possono essere eseguiti dal mio ambiente CI, se questo è in esecuzione come un servizio, ma solo se viene eseguito come un app.

Credo che si può fare, ma avrete bisogno di fare lavoro extra per far fronte con il modello di isolamento del processo (stazioni di finestre e desktop). Date un'occhiata a questa pagina: Processo di connessione a una finestra Stazione . Dal momento che non è possibile modificare il browser, potrebbe essere necessario scrivere uno spessore che cambia il contesto e poi invoca il browser.

Una soluzione è quella di eseguire il servizio come un servizio interattivo, ma questo è deprecato e non funzionerà nelle versioni più recenti di Windows.

I servizi sono espressamente vietati dalla interagire con l'utente. Dal momento che questo Vista è fatta rispettare, vedi servizi interattivi :

  

Importante Servizi non può direttamente   interagire con un utente come Windows   Vista. Pertanto, le tecniche   menzionato nella sezione intitolata Uso   un servizio interattivo non dovrebbe essere   usato in nuovo codice.

La soluzione è quella di separare la parte inteactive in un processo normale che viene avviato durante il sessione utente avvia (es. Una start-up del programma). Questo processo può quindi comunicare con il servizio attraverso il suo IPC di scelta (memeory condiviso, tubi netti, TCP, ecc). Il servizio può dirigere questo processo per avviare programmi quando necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top