IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Exécuter un programme à partir d'un service windows


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut Exécuter un programme à partir d'un service windows
    Salut,

    J'essaie désespérément d'éxécuter un programme à partir d'un service windows que j'ai créé.

    Peu importe le programme, j'ai l'impression que rien ne se passe. J'ai fait plusieurs tentatives. Voici le source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim p As New Process
                Dim pi As New ProcessStartInfo("Notepad.Exe")
                p.StartInfo = pi
                p.Start()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim ret
                ret = Shell("C:\Projects\P2W\Install\SmarTouch.exe", vbNormalFocus)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim proc1 As Process = New Process()
                Dim psi As ProcessStartInfo = New ProcessStartInfo()
                psi.UseShellExecute = False
                psi.RedirectStandardError = True
                psi.FileName = "C:\Projects\P2W\Install\SmarTouch.exe"
                proc1 = Process.Start(psi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim startInfo As New ProcessStartInfo("IExplore.exe")
                startInfo.WindowStyle = ProcessWindowStyle.Minimized
                Process.Start(startInfo)
                startInfo.Arguments = "www.northwindtraders.com"
                Process.Start(startInfo)
    J'ai mis des traces avant et après chaque appel, je les retrouve bien. Donc on passe bien dans le code.
    Je n'ai aucune erreur de compil, rien du tout pour tracer.

    Qq'un aurait une piste ?

    Merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un service ne peut en théorie pas démarrer d'applications qui s'affichent à l'écran, ou alors elles se lancent peut etre mais ne s'affichent pas


    tente de cocher "autoriser les interractions avec le bureau" dans les paramètres windows pour ce service
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Aussi, n'oublie pas que le service s'exécute avec un compte Windows spécifique, qui n'est pas celui de l'utilisateur "humain"

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    Salut,

    Merci pour l'info, je ne connaissais pas. Ca a bien réglé le problème. Mais maintenant, je suis face à un nouveau problème : comment automatiser la sélection de cette option dans le code VB du service ?

    J'ai bien vu qq liens :
    http://www.developpez.net/forums/d20...eragir-bureau/
    http://www.developpez.net/forums/d32...csharp-vb-net/

    Que j'ai appliqué. Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
        Public Sub New()
            MyBase.New()
     
            'This call is required by the Component Designer.
            InitializeComponent()
     
            Dim ckey As RegistryKey = Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Services\MonService\", True)
     
            If Not ckey Is Nothing Then
                If Not ckey.GetValue("Type") Is Nothing Then
                    ckey.SetValue("Type", 272)
                End If
            End If
     
     
     
        End Sub
    Quand je mets ce code dans la classe du service lui-même, la clé est bien mise à jour mais l'interface du programme ne se voit pas pour autant. Je me suis dis que le service n'arrivait pas à gérer la modification de cette option en live.

    Quand je mets ce code dans l'installeur du service (ce qui est préconisé), la clé n'est pas mise à jour. Je me suis dit que la clé "MonService" ne devait pas encore être créée, du coup, j'ai placé le code dans l'AfterInstall, même résultat. La clé n'est pas mise à jour.

    Pourtant, quand je lis les posts, c'est bien la solution. Qq'un aurait une idée ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    Je viens d'ajouter le code de mise à jour de la clé de registre dans la méthode Finalize, ça a bien marché. Puis quand je regarde l'option "Autoriser le service à interagir ...", elle est bien cochée.

    Par contre, quand je démarre le service, même problème, le lancement est masqué.

    Si je vais des les options, que je décoche et recoche l'option, là le lancement du programme se fait bien au premier plan.

    J'ai vérifié la base de registre, rien n'a bougé. Il y autre chose à faire, mais je ne vois pas quoi.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    Salut,

    Après quelques recherches, j'ai pu enfin trouvé une solution.

    La solution la plus courante et la plus connue sur le web est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Not ckey Is Nothing Then
                If Not ckey.GetValue("Type") Is Nothing Then
                    ckey.SetValue("Type", 272)
                End If
            End If
    Seulement, chez moi, ça ne fonctionne pas. Il s'agirait d'un bug sur certains framework. Il faut donc privilégier une autre méthode, ce qui n'est pas du luxe car elle est plus propre.

    olsimare avait déjà fait le taf, je n'ai eu qu'à copier :

    http://www.developpez.net/forums/d31...-infos-access/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/01/2015, 11h12
  2. Lancer un exe à partir d'un service windows
    Par Eldaorn dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/04/2009, 13h37
  3. Lancer un programme à partir d'un service
    Par edam dans le forum Langage
    Réponses: 5
    Dernier message: 21/02/2008, 19h04
  4. Réponses: 3
    Dernier message: 27/04/2007, 15h25
  5. Réponses: 3
    Dernier message: 15/05/2006, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo