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 :

[c#] Piloter un programme à distance


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut [c#] Piloter un programme à distance
    Bonjour,
    J'aimerais à partir d'un programme C sur une ordinateur client, exécuter une méthode d'un programme S tournant sur un serveur. (Aujourd'hui cette commande est exécutée via un bouton sur l'interface du programme S)

    - Est-il possible de simuler le clic du bouton de S à partir du client ? Si oui y'a-t-il des choses à faire du côté serveur ?
    - Sinon est-il possible d'exécuter des méthodes d'un programme S à partir d'un programme C tournant sur une autre machine ?
    - Sinon ... suggestion ?

    Merci

  2. #2
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,
    si tu peux modifier le programme S, et selon les technos utilisées, tu peux mettre en place un service web, ou alors même à l'ancienne créer un mauvais fichier à partir du programme C sur la machine distante, et S fait une boucle pour tester sa présence, puis réagit en conséquence...
    Si tu ne peux pas modifier S, voire si tu ne peux rien installer sur la machine où est S, alors t'es à peu près marron (à moins d'avoir beaucoup de patience, de fouiner dans les librairies Win32, de posséder tous les droits adéquats sur la machine distante etc., mais là je n'y connais rien donc je laisse la parole...)

    Voilà pour ce que je peux dire à lecture de ton message, mais ça dépend évidemment de ce que sont C et S, si tu nous en dit plus ça irait peut-être mieux... Ça serait pas un truc tordu limite illégal, par hasard ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut
    Citation Envoyé par MetalGeek Voir le message
    Ça serait pas un truc tordu limite illégal, par hasard ?
    =)
    Non non pas du tout, je crée un outils pour les développeurs (l'appli Cliente), permettant de diffuser les mise à jour des programmes de mon entreprise.
    Toutes les étapes sont automatisées sauf la dernière qui consiste à relire un fichier texte contenant le numéro de version du programme. Aujourd'hui il faut systématiquement aller sur le serveur et cliquer sur le bouton "relire" du programme Serveur, à chaque fois qu'on veut diffuser une mise à jour.
    C'est donc pour ça que je voudrais pouvoir à partir du Client, envoyer une info pour que le Serveur exécute la fonction "relire". J'espère que c'est plus clair.

    le Serveur est en C++ builder
    le Client est en c#

    Imaginons qu'il y ait un raccourcis clavier sur le bouton "relire", est-il possible d'appeler cette combinaison de touche depuis C par exemple ?

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Avec les dll Win32 tu peux faire ça (fonctions SendMessage, ou SendKey je sais plus), mais à distance ça me paraît foireux. Et c'est pas vraiment le genre de fonctions sur lesquelles tu veux faire reposer tout ton service de mise à jour...
    En fait en bricolant doit forcément avoir moyen d'y arriver, mais voilà, "bricoler" c'est pas un terme d'entreprise, enfin en principe
    Tu peux vraiment pas modifier S ? Ou sinon, si les fonctions Win32 foirent à distance (jamais testé, mais c'est le pressentiment que j'ai), un petit prog qui le ferait en local, et que tu déclencherais proprement par un service ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut
    J'aimerais éviter de modifier S.
    Maintenant si la modif est mineur et permet de gérer tout ça simplement et de façon sur, je peux m'arranger.
    En revanche j'ai aucune idée de la marche à suivre, classes à utiliser etc.

  6. #6
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Tu peux par exemple créer un timer qui va toutes les 24H vérifier la présence du fichier ou sa modification, et au besoin appeler la même fonction que le clic sur le bouton "relire" appelle.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut
    Oui j'avais pensé à ça mais je préférerais que l'info soit envoyée par le client plutôt qu'une vérif systématique. Mais c'est vrai que ça supprime la problématique de communication client-serveur ...

  8. #8
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Pour moi y'a pas photo, si C ne sert qu'à ça, c'est clair à 2000% qu'il vaut mieux virer C. Ca t'élimine 1 million de sources de bugs potentiels !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut
    Non non, C ne fait pas que ça bien sur.
    Ce qui m'ennuie si je décide de relire le fichier par S c'est que :
    - On va la plupart du temps relire le fichier inutilement, même si je programme une relecture toutes les 24h (les mises à jour sont occasionnelles).
    - Si je programme une relecture toutes les 24h par exemple, la mise à jour ne sera pas effective avant le lendemain.
    - Le plus gênant : s'il n'y a pas de communication entre C et S, aucun moyen pour C de savoir si la relecture du fichier s'est bien passée

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Par défaut
    Ta penser à un petit service web?
    C'est à dire que dès que tu veut "relire" tu lance ton programme S avec du PHP ou autre. Le C++ ne devrait que très peu changer et si le PHP est bien fait pas de raison d'avoir peur de la sécurité. Et regarde aussi de coté de SOAP.

    Pour SOAP : [ame]http://fr.wikipedia.org/wiki/SOAP[/ame]

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut

    En fait je pensais à une solution "simple" et n'y connais presque rien au php, je n'avais effectivement pas envisagé une solution passant par un web service ...

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Par défaut
    Si jamais tu t’intéresse au php tu peut toujours regarder la fonction exec()

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Par défaut
    Ton concept m'a l'air tirée par les cheveux.
    Que je sache, les client mails envoient une requete au serveur pour voir s'il y'a de nouveau messages, ca marche comme ca depuis toujours, et ca marche bien.

    Sinon pour répondre a ta question, oui ce devrait être réalisable.

    avec APP Client Bind sur un port et se met en mode listen sur ce port (ouvre pipe)

    elle doit s'attendre a un packet prédéfinie (WSOCKs libs) qui représentera l'ordre d'allez télécharger la MAJ

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut
    Citation Envoyé par F.Saad Voir le message
    Ton concept m'a l'air tirée par les cheveux
    Lequel ? Le concept général du problème ou une des solutions proposées ?

    Citation Envoyé par F.Saad Voir le message
    avec APP Client Bind sur un port et se met en mode listen sur ce port (ouvre pipe) elle doit s'attendre a un packet prédéfinie (WSOCKs libs)
    La par contre je suis perdu ...

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 507
    Par défaut
    Question con, ne serait-ce-pas beaucoup plus simple que ce fainéant de Serveur installe un FileSystèmeWatcher?
    http://msdn.microsoft.com/en-us/libr...emwatcher.aspx

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Question con, ne serait-ce-pas beaucoup plus simple que ce fainéant de Serveur installe un FileSystèmeWatcher?
    http://msdn.microsoft.com/en-us/libr...emwatcher.aspx
    A quoi cela servirait t'il SUR LE SERVEUR ?

    - je parlais du fait que ca ne marchait pas comme la relation entre un serveur mail/client mail.

    - Je vais éssayé de developer un peu plus mon idée :
    Tes Clients deviendront aussi partiellement des serveurs en créant une connections TCP (ou UCP pk pas) sur un port sur lequel le "client" serait constamment en écoute.
    - Ton "Serveur" devra envoyé un packet pour lequel le client aura un event ce qui fera de ce packet l'ordre de télécharger la MAJ

    (dsl minuit)

  17. #17
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Par défaut
    Alors voila une autre solution avec un petit tuto à l'appui ^^

    Donc en gros, ce que tu voudrais faire est l'équivalent d'un chat. Je m'explique :
    1/ un client envoie une requete/ un paquet à ton serveur contenant une instruction
    2/ le serveur recoie ce paquet
    3/ il le traite puis le serveur le renvoie à tous les clients


    1/ partie executé par ton programme C : envoi d'un "paquet magique"
    2/ ce paquet magique va être reçue par le serveur
    3/ Il le traite c'est à dire qu'il envoie les mises à jour à tous les clients de ton entreprise, ce que tu as déjà fait.

    Tu aura donc besoin de changer assez peu le programme S et tu pourra sécuriser le tout en, par exemple, nécessitant un login et un mdp dans ton "paquet magique" et une petite condition pour valider ces login

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Par défaut
    Merci Inarius pour cette solution.
    Par contre moi qui voulais quelque chose de simple ...

    J'avais pensé sinon à utiliser sendkeys.
    J'ai bien trouvé comment utiliser sendkeys et activer un bouton d'un autre programme en local, mais je n'arrive pas à faire transiter cette info via le réseau.
    Oui bon je sais, côté sécurité ...

Discussions similaires

  1. rexec sous linux. Execution de programme à distance
    Par Jonathan.b dans le forum Administration système
    Réponses: 7
    Dernier message: 29/09/2007, 23h12
  2. Réponses: 7
    Dernier message: 20/06/2007, 11h31
  3. lancer un programme à distance
    Par noinneh dans le forum Windows
    Réponses: 9
    Dernier message: 17/03/2006, 09h29
  4. [DCOM] Accès refusé au lancement du programme à distance
    Par raoulmania dans le forum Web & réseau
    Réponses: 7
    Dernier message: 22/06/2005, 13h01

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