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

C# Discussion :

Comment charger un GUI depuis un service windows?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut Comment charger un GUI depuis un service windows?
    Bonjour à tous,

    La situation est assez simple. D'un coté un service windows, qui tourne donc en tache de fond et qui attend des requêtes.
    à la demande, il est sensé lancer un petit programme. Ce sont en fait des classes encapsulées dans une DLL.
    Le service charge donc l'assembly, créé l'objet et tout va bien jusque là.

    Lors de l'appel de la methode ShowDialog sur l'objet, j'obtiens cette exception:

    Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.
    Alors quelqu'un saurait il comment:
    lancer une application avec gui depuis un service windows?
    "Spécifier" le ServiceNotification ou le DefaultDesktopOnly?

    Je ne pense pas que le problème soit lié à la manière dont je charge l'assembly du programme, ni à comment je le lance. Ce n'est donc pas un problème de code, en tout cas pas avec l'existant. Ce serait plus un problème de code manquant si la configuration du service se fait par là (par le code je veux dire..).

    Toute fois
    Je sais que certains voudront du code alors....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Charger l'assembly
     Assembly asm = null;
     asm = Assembly.LoadFrom(file);
    Type aftype = asm.GetType("Afficheur");
     
    //Lancer le GUI
    Afficheur mn = (Afficheur)Activator.CreateInstance(aftype);
    mn.ShowDialog();
    mn.Dispose();
    Voilà, je vous remercie tous

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    En fait pour lancer une GUI à partir d'un service windows, il faut autoriser l'utilisateur du service à interagir avec le bureau.
    Tu peux le faire manuellement -> gestionnaire de service -> propriété de ton service -> onglet connexion :
    Si tu utilises le compte système local tu pourras cocher l'option autoriser le service à interagir avec le bureau.
    Attention MS déconseille de le faire. Si tu peux éviter de passer par une GUI lancer par le service, MS préférerait. Bref c'est bien beau mais des fois ce n'est pas possible, c'est le cas pour un service que j'ai dév.
    Par contre je fait le paramètrage à la main donc je ne sais plus si c'est faisable par le code.
    Je te file les liens que j'ai utilisé pour faire mon Service Windows :
    1) Classique, il faut aller à la source
    2) Un autre site très interessant
    3) Grâce à
    4) Et on ne pouvait pas finir sans proposer le tutorial de developpez.com

    Si cela peut t'aider j'en serais ravis

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Je te remercie pour ta réponse qui était exactement ce que je cherchais.






    SAUF.... (ben oui sinon ce serait pas drole...) J'ai un autre soucis.

    J'ai déployé mon appli dans windows xp avec le réglage donc et ça marche du feu. Sans soucis, nickel, génial super.

    Par contre, quand je l'ai déployé sur windows server 2003.... tout se passe bien, démarrage aussi nickel tout. Mais quand il est sensé chargé la fenêtre du petit logiciel dont j'ai parlé, il... ne se passe rien !!
    Mais rien de rien. Pas de bugs, pas d'exception, pas de message d'erreur, pas de processus supplémentaire, ni de thread rien! il ne se passe rien!

    Aurais tu un semblant d'explication à ça?

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Deux possibilité à cela :

    1) Tu accèdes au serveur Windows 2003 par le bureau à distance ou un truc du genre. Dans ce cas là il est possible que tu accédes à une session d'ID autre que 0. Et ta petite fenêtre se lance uniquement sur la session d'ID = 0.
    Normalement tu as le moyen de dire ton soft de connection à distance de se connecter sur la session d'ID 0. Si c'est bien se problème tu as de la chance parce que l'autre erreurs possibles ....

    2) Ne te faisons pas languire d'avantage. Ho et puis si laisse moi te parler avant des Rollings Stones .... Nan je plaisante (en plus je ne connais pas grand chose sur eux !!!).
    Bon continuons, la deuxième possibilités c'est la plus chainte -> une règle de sécurité sur ton Windows 2003 Server, prioritaire sur l'option d'interaction avec le bureau, n'autorise pas ton service à lancer la GUI de ton application.
    Dans ce cas là tu es dans la merde car cela peut être n'importe koi comme règle, pas forcément un truc qui dit : "Un service ne peut pas lancer de GUI", cela peut être un truc qui est prévu pour autre chose mais qui à pour effet de bord de ne pas prendre en compte l'option cité plus haut.

    Bref comme j'ai dit c'est la merdre . J'ai eu ce problème et je ne l'ai pas résolu . Ensuite j'ai utilisé une config particulière de Windows Server 2003 distribué dans mon entreprise et avec elle pas de problème

    Sous Xp les règles de sécurité son moins strict

    Bon courage pour trouver la bonne règle et la modifier, enfin si tu en as le droit .

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Bon alors je vais tenter de rester optimiste... je ramène le pc sur le bureau...( oui, je l'avais accidentèlement posé sur le bord de la fenêtre.... )

    Alors en fait, il s'agit d'un virtual server windows 2003. L'utilisateur quel qu'il soit (moi compris en tant qu'admin) se connecte via l'outils de Remote Desktop Connection de XP.

    Est ce que ça te permettrait de me dire comment mettre le id dont tu parlais à 0?
    si ça s'applique ici biensur.

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Tu utilises la console mmc comme moi alors
    Bon tout ce que je peut faire c'est te renvoyer à l'aide windows (voir la photo) et à ce site :
    http://www.jurixt.com/xp/xp_02.htm
    Il est assez complet, et là tu comprends enfin ce qu'est le bureau à distance.

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

Discussions similaires

  1. Comment lancer Kitchen.bat depuis un service windows sous l'usager système
    Par Jean-Philippe Shields dans le forum kettle/PDI
    Réponses: 1
    Dernier message: 22/06/2012, 17h20
  2. Réponses: 2
    Dernier message: 27/04/2006, 15h22
  3. [C#] Execution d'un fichier VBS depuis un service Windows
    Par 0r3L dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/11/2005, 22h58
  4. Comment charger un TFrame depuis une dll ?
    Par Millenod dans le forum Langage
    Réponses: 29
    Dernier message: 22/12/2004, 14h48

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