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 Discussion :

[C] Lancer un .exe en fond de tâche


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut [C] Lancer un .exe en fond de tâche
    Voila, j'ai créé un beau petit programme, sans printf ni rien pour qu'il tourne en fond de tâche, mais lorsque je lance l'exe j'ai la console MSDOS avec le curseur clignotant mais rien d'affiché à l'intérieur... Autant dire que ça ne me sert à rien.

    Quelqu'un saurait comment l'enlever ? Dois-je bidouiller mon éxécutable ou bien modifier mon code source (et comment le modifier) C'est assez gênant.

    Merci beaucoup !

  2. #2
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Il suffir de créer un projet Appli Win32 et non console et remplacer ton actuelle fonction main par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int WINAPI WinMain (HINSTANCE hThisInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, je vais essayer !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    C'est ok, il me fallait juste rajouter la directive de préprocesseur <windows.h>.

    J'ai cependant un autre problème à la compilation. En fait mon programme est un "bouffe-RAM" :

    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
    #include <stdio.h>
    #include <windows.h>
    
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
    
        void *malloc(size_t size);
    
        while (1) // Boucle infinie
        {
            malloc(999999999); // Taille maximale pouvant être allouée
        }
    }
    Tout con quoi. Bref quand je compile, j'obtiens le message :

    main.c : undefined reference to `malloc(unsigned int)`
    collect2: ld returned 1 exit status
    make.exe: *** [Projet1.exe] Error 1
    Exécution terminée

    Avant la modif pour masquer l'exécutable, j'avais le même problème sous Code::Blocks, mais pas sous Dev-C++ (pourtant, j'utilisais MinGW dans les deux cas... ). Maintenant, je l'ai aussi sous Dev-C++... Saurai-tu d'où ça peut venir ? J'ai tout essayé. Merci.

  5. #5
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    pour malloc, il faut inclure stdlib.h

    ton prog n'est pas seulement un "bouffe RAM" comme tu dis, mais aussi un "bouffe CPU"
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses. J'ai rajouté stlib, ça compile sans problème... Mais j'ai toujours la fenêtre MSDOS au lancement de mon programme !

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    En revanche, je ne comprends pas :

    Occupations
    SANS
    RAM : ~ 200 Mo
    UC : 0% à 5%
    Fichier d'échange : 211 Mo

    AVEC
    RAM : ~ 200 Mo (le programme n'utilise que 692 Ko !)
    UC : 100%
    Fichier d'échange : 2.07 Go

    Etant donné que la RAM n'est pas occupée, est-ce que ça altère vraiment les performances ? Chez moi, hormis l'ouverture de Firefox, je ne sens pas grand chose (c'est quand même plus lent).
    Comment occuper la RAM ?

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Je te l'avais dis que cela serait un "Bouffe CPU"...

    T'a combien de RAM sur la machine ??

    Windows swappe à mort... faudrait voir tes paramètres de gestion de la mémoire de ta machine...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai 1 Go de RAM.

    Pourtant, sous Linux, le même programme, en plus de swapper à fond, bouffe toute ma RAM en 5 secondes chrono, donc ça rame encore plus (impossible de bouger le curseur).

  10. #10
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Sous windows, allouer de la mémoire avec malloc ne suffit pas pour allouer de la mémoire physique : il faut également y accéder.
    Le principe d'optimisation est le suivant : le programme demande un gros bloc de mémoire avec malloc, windows renvoie un pointeur vers une zone mémoire virtuelle qui n'est pas mappée sur de la mémoire réelle : la RAM n'est pas encore allouée. Le premier accès (lecture ou ecriture) provoque une faute de page que Windows intercepte pour allouer réellement la mémoire.

    En clair : en plus de malloc tu dois faire un memset pour y accéder du début à la fin et donc provoquer son allocation réelle.

    Sous Linux je ne connais pas le mécanisme utilisé par les implémentation stdlibc de malloc.

    PS :
    Juste par curiosité, qu'est-ce que tu cherches à faire ? Planter Windows ? Dans ce cas il y a plus facile

    Hope it helps
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse. Va falloir que je me mette à memset.

    Ce que je cherche à faire ? Trouver des failles (qui n'en sont pas vraiment) dans cette passoire de système.

  12. #12
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Bon courage, et il en faut parce que des failles ça ne manque pas mais pour les trouver il faut un peu plus qu'une petite boucle de malloc et de memset.

    Je te joins les sources de Windows pour t'aider dans ton aventure
    Fichiers attachés Fichiers attachés
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci.

    Premièrement, faudrait que je connaisse un peu la syntaxe de memset. Jamais utilisé pour le moment.

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh...
    Es-tu sûr que Windows utilise un tas optimiste ?

    De toute façon, pour jouer avec de grosses quantités de RAM, je conseillerais plutôt de taper directement dans des fonctions comme VirtualAlloc()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Mission : Trouver les syntaxes et quelques exemples pour memset et VirtualAlloc.

Discussions similaires

  1. [FreePascal] Lancer un exe
    Par Ultraboss dans le forum Free Pascal
    Réponses: 4
    Dernier message: 02/11/2005, 19h03
  2. Réponses: 7
    Dernier message: 10/10/2005, 18h54
  3. [VS .NET] Comment lancer un .exe
    Par lastcheper dans le forum MFC
    Réponses: 2
    Dernier message: 31/08/2005, 15h38
  4. [Flash MX2004] Lancer un *.exe avec fscommand
    Par pioup dans le forum Flash
    Réponses: 7
    Dernier message: 30/07/2004, 16h28
  5. [Debutant(e)]Lancer un exe en ligne de commande
    Par MASSAKA dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 18/05/2004, 14h54

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