Question

Est-il possible de lancer un navigateur Web à partir d'un service Windows? J'ai créé un service de base en C # et installé sous le profil de sécurité « LocalSystem ».

Le code pour le service se présente comme suit:

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

Lorsque le service fonctionne, rien ne se passe. La documentation sur le service Windows dire qu'ils n'ont pas l'interface utilisateur, mais ce que cela signifie le lancement d'un navigateur Web est impossible.

Était-ce utile?

La solution

Il est possible que dans XP et inférieur. Dans Vista, Windows Services est exécuté sur un ordinateur de bureau séparé complètement. Vous devez avoir quelque chose en cours d'exécution dans le bureau de l'utilisateur pour y parvenir.

Ecrire une application avec une fenêtre cachée qui commence au démarrage comme une solution de contournement.

Autres conseils

Je ne pense pas que cela est possible. Je sais que si vous voulez exécuter Watin (tests fonctionnels qui fonctionnent dans une instance du navigateur) ne peuvent pas être exécutés à partir de mon environnement de CI, si cela est en cours d'exécution en tant que service, mais seulement si elle fonctionne comme une application.

Je crois que cela peut être fait, mais vous aurez besoin de faire un travail supplémentaire pour faire face au modèle d'isolation du processus (stations de fenêtre et postes de travail). Jetez un oeil à cette page: Connexion processus à une fenêtre station . Puisque vous ne pouvez pas modifier le navigateur, vous devrez peut-être écrire un shim qui change le contexte et appelle le navigateur.

Une solution de contournement est d'exécuter votre service comme un service interactif, mais cela est dépréciée et ne fonctionnera pas dans les versions plus récentes de Windows.

Les services sont explicitement interdit d'interagir avec l'utilisateur. Depuis Vista, c'est appliquée, consultez Services interactifs :

  

Important Services ne peuvent pas directement   interagir avec un utilisateur de Windows comme   Vue. Par conséquent, les techniques   mentionné dans la section intitulée Utilisation de   un service interactif ne doit pas être   utilisé dans le nouveau code.

La solution consiste à séparer la partie inteactive dans un processus normal qui est lancé au démarrage de la session utilisateur (ie. Un programme de démarrage). Ce processus peut alors communiquer avec le service via son IPC de choix (memeory partagé, tuyaux net, TCP, etc.). Le service peut diriger ce processus pour lancer des programmes en cas de besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top