2010-03-23 4 views
3

Est-il possible de démarrer un programme afin qu'il soit disponible pour un utilisateur avec un service Windows? J'ai travaillé avec le Process.Start() en C#. Je peux obtenir le service pour lancer une sorte de processus qui apparaît dans la liste du Gestionnaire des tâches sous les processus. Cependant, le programme nevers apparaît sur l'écran. Par défaut, il fonctionne sous le nom d'utilisateur "SYSTEM". J'ai ajusté l'option "Connexion" dans le gestionnaire de service pour correspondre à la personne connectée à l'ordinateur, mais cela ne provoque pas l'apparition d'une fenêtre non plus. J'ai l'impression que je manque un paramètre simple ou que je dois prendre une direction différente pour cela. Ci-dessous le code avec lequel j'ai travaillé pour démarrer Firefox en tant qu'application de test.Comment programmer un service Windows en C# pour démarrer une application pour un utilisateur?

private void startRunDap() 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.FileName = "Firefox"; 
     startInfo.WindowStyle = ProcessWindowStyle.Normal; 
     startInfo.UseShellExecute = true; 
     Process.Start(startInfo); 

     //Process.Start("Firefox"); 

    } 
+0

Intrigué pour expliquer pourquoi un service et non pas seulement un raccourci ajouté au menu de démarrage? – Paolo

+0

Nous avons une application tierce que nous voulons utiliser comme application de type 'serveur'. Pour une raison inconnue, le programme se fermera de façon inattendue. Nous essayons de mettre en place un service Windows pour vérifier si l'application est en cours d'exécution et redémarrer si elle est en panne comme une solution temporaire pour ce problème. – Swoop

+2

Comment cette application tierce a-t-elle démarré? Pourquoi ne pas simplement créer un programme qui démarre cette application, attendre qu'il se ferme de façon inattendue, puis le redémarrer? – Gabe

Répondre

4

Mettez une coche à « Autoriser le service à interagir avec l'utilisateur » à des propriétés de service dans les services

+0

Même si cela fonctionne, il est découragé de le faire. – Giorgi

+0

Andrey, ça a marché comme un charme. Giorgi, pourquoi est-ce découragé? – Swoop

+1

Cela ne fonctionne pas avec Windows Vista et plus tard, si je comprends bien. – jwismar

5

Sur Vista et les services Win7 exécuter dans leur propre session avec un bureau privé. Vous allez démarrer Firefox mais il ne sera jamais visible. Le nom du compte est en fait comment cela est arrivé, LocalSystem est un compte hautement privilégié, un trou de sécurité géant.

Vous aurez besoin d'un "agent" dans la session utilisateur pour démarrer le processus. Un programme autrement invisible que vous démarrez avec la clé Exécuter ou le dossier Démarrage qui parle au service via, disons, un tuyau ou un socket nommé. Il peut démarrer le programme.

3

Voici un lien vers un billet de blog qui décrit comment procéder dans Windows Vista et versions ultérieures. Vous devriez noter, cependant, que les premières phrases dans l'article sont:

La première chose que vous devriez faire à ce sujet est que; ne fais pas ça. Il y a beaucoup de limitations et de mauvaises implications et restrictions impliquées. Si vous êtes dans un état où vous ne pouvez pas éviter de lancer un processus interactif à partir du service Windows, vous pouvez lire cet article.

Windows SDK blog

Questions connexes