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++/CLI Discussion :

lancer un programme C++ en background


Sujet :

C++/CLI

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 44
    Points
    44
    Par défaut lancer un programme C++ en background
    bonjour

    j'ai crée un programme en c++ et je veux lance le .exe en arrière plan comme un precess pour ne pas déranger les utilisateur.

    est ce qu'il y a une méthode pour faire ça?
    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    S'il n'a pas besoin d'un utilisateur connecté, faites en un service Windows, si c'est sous Windows bien sûr.
    http://en.wikipedia.org/wiki/Windows_service

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    mon script s’exécute après l'ouverture du session d'un utilisateur

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    Je ne vois pas trop le problème.
    Tout programme non console qui n'ouvre pas de fenêtre est dans ce cas de figure.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    je vais éclairer le chose
    j'ai crée un programme en c/c++ sous windows qui s’exécute au lancement d'une session windows ce programme se connecte sur une base de données MYSQL pour insérer (login utilisateur,nom du machine,ip adresse,date_heure se connexion) et sur mon programme j'ai rajouté une fonction qui s’exécute chaque 5 sec pendant 30 min si le poste agent n'arrive pas a se connecter à la base de données pour insérer les données et mon problème ce que le fenêtre dos reste afficher devant les yeux de l'utilisateur chose qui empêche son travail et aussi il peut la fermer avant de terminer le programme
    ma demande est ce je peux lancer mon programme en arrière-plan comme ?si oui c'est quoi la méthode
    voila mon code c/c++
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include <stdafx.h>
    #include <conio.h>
    #include <winsock.h> 
    #include <mysql.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <string>
    #include <iostream>
    #include <assert.h>
    #include <windows.h>
     
    int main(int argc, char **argv)
     
    {
     
             char* adr;
             char req [400];
     
           adr=(argv[1]);
     
     
        char* us;
        us=getenv("USERNAME");
           char* co;
        co=getenv("COMPUTERNAME");
     
    char *ip;
     
     
      MYSQL *conn;
    char id[64]= {"0"}; ;
    int k=0;
    stop:
      conn = mysql_init(NULL);
      if( mysql_real_connect(conn, "127.0.0.1", "login", "pass", "user", 0, NULL, 0) == NULL) {
     
          k++;
     
          Sleep(5000);
          if (k==360){
        exit(1);
    }
        else{
            printf("%d",k);
               goto stop;
               }
     
          }
    else {
     
    strcpy (req, "INSERT INTO collecte_login(ID,MATRICULE,ACTION,IP,DESK,STAMP) VALUES ('0',");
    strcat (req, "'");
    strcat (req, us);
    strcat (req, "',0,'");
    strcat (req, adr);
    strcat (req, "','");
    strcat (req, co);
    strcat (req, "',NOW())"); 
    mysql_query(conn,req);
    mysql_close(conn);
    }
     
    }

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    Vous cherchez midi à 14 heures.

    mon problème ce que le fenêtre dos reste
    Il n'y a plus de fenêtre DOS sous Windows depuis au moins 17 ans (Win95).
    Ce n'est pas une fenêtre DOS mais une console, donc

    Tout programme non console qui n'ouvre pas de fenêtre est dans ce cas de figure.
    Vous êtes dans un programme console.
    Assez logique avec une signature C d'il y a 40 ans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char **argv)
    Créez un projet Win32 NON CONSOLE, le nom du point d'entré sera très vraisemblablement WinMain et non main.

    P.S.: moi, j'aurais penché vers l'utilisation des fonctionnalités intégrées d'Active Directory plutôt que ce bricolage.
    http://technet.microsoft.com/en-us/l.../bb742436.aspx

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Une console à plus de 17 ans si ont rentre dans se type de petit délire

    Actuellement c'est une invite de commande ou l'emulation d'un terminal DOS

    Il y a une méthode crade qui s'appel le Ghost.

    En gros tu fais un programme qui va forker ton programme que l'ont va appeler papa.

    En gros papa se termine salement sans fermer le fils et donc tu te retrouve avec un ghost soit un processus qui tourne sans réel attache en gros.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    jouana, ton second prénom c'est Hibernatus ???

    Actuellement c'est une invite de commande ou l'emulation d'un terminal DOS
    DOS n'a j'amais eu de terminal, c'est pas UNIX
    Et le prompt affiché par cmd.exe n'est pas une console TTY.

    jouana, tu mélanges tout et n'importe quoi.

    En gros tu fais un programme qui va forker ton programme que l'ont va appeler papa.

    En gros papa se termine salement sans fermer le fils et donc tu te retrouve avec un ghost soit un processus qui tourne sans réel attache en gros.
    C'est bien, ranges ton grimoire du Moyen-age et rendor-toi.

    Ce truc, c'est de l'Unix des années 60, et c'est pas parce que Windows était vaguement compatible POSIX 1 pour l'US Army, dans les années 80/90, qu'il faut l'utiliser.

    P.S.: ce n'est pas un ghost, n'y même un zombi Unix, et il faut faire un détachement explicite de la console hérité par le programme parent. C'est dans les 3 premiers descripteurs de fichiers, si je me souviens bien de mes cours de paléontologie informatique.

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Mouais les zombies sont encore utilisé sous linux et BSD.
    Enfin bon après pas la peine d'être désagréable j'offre une solution comme une autres.

    Ensuite penches toi sur la création de service windows, zaki_1982 tu devrais trouver ton bonheur.

    Et un terminal n'est pas propre à UNIX, c'est juste une interaction entrée sortie, que tu retrouve sur beaucoup d'OS différents, TTY en est un parmi beaucoup d'autres.

    Mais je te rejoins sur le fait que DOS n'est plus depuis windows NT et que l'ont a maintenant des émulations de ce derniers.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    que l'ont a maintenant des émulations de ce derniers.
    NON
    Il n'y a RIEN de DOS dans Windows. RIEN RIEN RIEN même plus l'intéruption 21, RIEN.

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Sans rentrer dans un grand débat la dessus un petit extrait de Wikipedia

    Windows XP qui en est la version 5.1, se passe presque intégralement de la ligne de commande, et l'invite de commandes qu'elle propose n'est qu'un émulateur, largement bridé, de MS-DOS.
    J'ai pas dit que c'était DOS mais que l'invite de commande est un émulateur de DOS.

    Soit quelque chose qui imite le fonctionnement de DOS.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    L'URL, s'il te plait, que j'aille corriger de ce pas.

    MS-DOS, c'est pas qu'un interpréter de commande qui fait clignoter un curseur avec les commandes du BIOS. Faut arrêter de déconner à un moment.

    Et il va contenir Linux quand je vais installer cigwin sur ma machine ?
    Non, mais ce que après, les commandes "Linux", elle vont être comprise de l'interpréter de commande de Windows (Le PATH fait de petit miracle émulatique ).
    Non, mais, ce qui faut pas entendre.

    Soit quelque chose qui imite le fonctionnement de DOS.
    Comme si un primate imite le fonctionnement d'une amibe.

    Enfin, tout ça pour faire un programme qui ne sert à rien puisque toutes ces informations sont déjà dans l'Active Directory du domaine Windows.

  13. #13
    Membre actif Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Points : 265
    Points
    265
    Par défaut
    Je me rappelle que pour avoir créé simplement un programme non-fenêtré, j'avais compilé mon code en précisant que c'était un processus, dans l'IDE Dev-C++, et comparé à un Code::blocks ou je ne sais quoi, comme par magie ça avait fonctionné.

    Désolé je ne me rappelle plus exactement comment j'avais réalisé ceci, mais ça doit pouvoir se retrouver facilement, et comme j'ai plus DevC++ d'installé sur mon PC ...

    En tout cas tout ca pour dire que tu dois pas te compliquer la vie, normalement ca doit se faire comme ca.

    Cdt,
    Vespiras

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    "un processus" ou un service ?

    Et oui, ce n'est pas compliqué, si on sait ce qu'on fait.

  15. #15
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Citation Envoyé par zaki_1982 Voir le message
    bonjour

    j'ai crée un programme en c++ et je veux lance le .exe en arrière plan comme un precess pour ne pas déranger les utilisateur.

    est ce qu'il y a une méthode pour faire ça?
    merci
    Il y a deux méthodes et Bacelar les a donné : un service ou une application Win32 qui n'affiche pas sa fenêtre.

    Pour le service, il suffit de faire une boucle et d'attendre que l'utilisateur soit loggé.

    Pour l'application Win32, utiliser un timer.

    PS : si le but de votre programme, c'est de scruter les logging des utilisateurs, vous avez ces informations dans le journal d'évènements Windows... Suffit de récupérer ces journaux.

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    Pour l'application Win32, utiliser un timer.
    Très moyen comme approche, une tâche planifiée, c'est mieux, et les logs sont automatiquement générés dans le journal d'évènements Windows.
    Moi, fainéant, et fière de l'être.

  17. #17
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour Bacelar.

    Je veux bien croire qu'il y a de meilleures approches. Mais de là à dire que c'est très moyen, un malheureux petit timer de 5 secondes

    PS : je le prends au second degré...

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 068
    Points : 12 111
    Points
    12 111
    Par défaut
    Alors l'approche timer :
    - non partage du scheduling système : gaspillage de ressource système
    - plantage sur problème transitoire (connexion réseau ...) : pas de logs automatique, pas de redémarrage automatique (celui qui me colle un try catch(...){}, je le baffe)
    - Intégration dans une console de monitoring, monsieur le développeur, il va se la cogner à la main
    - les timers, c'est la vraie jungle et les plus fiable, c'est du multi-threading obligatoire, est-ce justifié pour un pauvre programme basique ?
    - paramétrage via un console standard que même Mme Michu peut maitriser, donc, a fortiori aussi un admin système, même pas très dégourdi.
    - paramétrage au niveau des scripts d'installations totalement customisable avec des primitives que notre cher admin système connait sur le bout des doigts.
    ...
    Avec un scheduled task, j'ai aucun de ces inconvénients et tout ces avantages GRATIS (0+0=0 ligne de code en plus ).

    Non, franchement, je ne vois aucun avantages aux timers "embarqués" pour une application de ce type, mais alors au niveau emmerdes, c'est pas mal.

    Mais je vois le mal partout (normal, je suis développeur et Murphy est mon ami ).

    moldavi, je suis tout ouïe pour entendre votre plaidoyer pour le timer embarqué dans l'application.

Discussions similaires

  1. Lancer un programme a la Fermeture de Windows
    Par sali dans le forum Windows
    Réponses: 2
    Dernier message: 01/07/2004, 22h54
  2. [LG]lancer un programme extérieur
    Par dsr57 dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2004, 18h41
  3. Lancer un programme au démarrage
    Par ludo_7 dans le forum Windows
    Réponses: 7
    Dernier message: 09/10/2003, 16h29
  4. Lancer un programme, mais sur une autre machine
    Par GOUGOU1 dans le forum Réseau
    Réponses: 12
    Dernier message: 08/12/2002, 20h36
  5. Réponses: 8
    Dernier message: 05/06/2002, 11h55

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