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

WinDev Discussion :

LanceAppli Fonctionnement différent entre programme compilé ou non


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 14
    Points
    14
    Par défaut LanceAppli Fonctionnement différent entre programme compilé ou non
    Bonjour,
    Dans mon programme Windev 17 je veux lancer un programme externe à ce programme. J'ai utilisé pour cela l'instruction LanceAppli.
    Le programme externe traite des fichiers (il doit produit un fichier résultat) et je tiens à ce que le programme Windev attende sa fin d'exécution pour continuer.
    En mode test, pas à pas par F8, tout se passe bien. Lorsque je compile le programme Windev le fonctionnement du fichier exe ne semble pas laisser le temps à ce programme externe pour s'exécuter (le fichier résultat n'est pas crée). J'ai essayé les divers paramètres de LanceAppli (exeBloquant, exeNonBloquant, etc...), ai pourtant ajouté Multitache(2000), après l'instruction LanceAppli, pour lui laisser largement le temps de s'exécuter mais sans succès.
    On dirait que l'exécution du programme Windev n'est pas identique entre celle du programme compilé et l'exécution en mode test.
    Quelqu'un aurait-il une solution à ce problème. D'avance merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 87
    Points : 49
    Points
    49
    Par défaut
    Bonjour mahmgm

    J'ai déjà eu des problèmes comme ça, ou le test fonctionnais mais pas la génération.

    Dans le génération, faudrait que tu regarde coté UAC avec "intégrer un manifeste pour Windows Vista et supérieur".

    De mon coter j'ai du souvent cocher "Mon application utilisera les privilèges maximum de l'utilisateur courant" pour que cela fonctionne.

    Bon courage
    Amicalement

  3. #3
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Citation Envoyé par mahmgm Voir le message
    Bonjour,
    Dans mon programme Windev 17 je veux lancer un programme externe à ce programme. J'ai utilisé pour cela l'instruction LanceAppli.
    Le programme externe traite des fichiers (il doit produit un fichier résultat) et je tiens à ce que le programme Windev attende sa fin d'exécution pour continuer.
    En mode test, pas à pas par F8, tout se passe bien. Lorsque je compile le programme Windev le fonctionnement du fichier exe ne semble pas laisser le temps à ce programme externe pour s'exécuter (le fichier résultat n'est pas crée). J'ai essayé les divers paramètres de LanceAppli (exeBloquant, exeNonBloquant, etc...), ai pourtant ajouté Multitache(2000), après l'instruction LanceAppli, pour lui laisser largement le temps de s'exécuter mais sans succès.
    On dirait que l'exécution du programme Windev n'est pas identique entre celle du programme compilé et l'exécution en mode test.
    Quelqu'un aurait-il une solution à ce problème. D'avance merci.
    Essaye de donner un exemple du code que tu as utilisé. Personnellement sur cette commande, je me suis déjà fait avoir, parce que exeBloquant doit être le 3ième paramètre et dans mon cas, je l'avais passé en 2ième paramètre.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Merci à Squall049 et à Delphimaniac pour leur réponses. Je précise que je suis sous Windows Seven Ultimate Edition en temps qu'Administrateur et j'ai essayé sans succès de modifier les caractéristiques UAC lors de la compilation.
    Pour préciser les choses je vous transmets les instructions du programme Windev appelant le programme steghide.exe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    LProg = "steghide.exe embed -cf "
    LProg = Lprog + fCheminCourt(FichierImage) + " -ef "
    Lprog = LProg + fCheminCourt(FichierMessage)
    SI SansEspace(SaisieCode) <> "" ALORS
    // Caract(34) donne le caractère "
    LProg = LProg + " -p " + Caract(34) + SansEspace(SaisieCode) + Caract(34)
    SINON
    LProg = LProg + " -p " + Caract(34) + Caract(34)
    FIN
    LProg = LProg + " -q"
    Sablier()
    LanceAppli(LProg,exeIconise,exeBloquant)
    Multitâche(1000)
    Sablier(Faux)
    En mode test, avance par F8, j'observe l'affichage de la fenêtre iconisée pendant quelques secondes correspondant au traitement LanceAppli.
    Par contre en activant le programme compilé, cette fenêtre n'apparaît pas et bien sûr le traitement n'est pas effectué.
    J'espère que ces renseignements vous aideront dans votre aide et je renouvelle mes remerciements.

  5. #5
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Où est situé ton programme 'steghide' ?

    Tu ne précise pas dans la ligne de commande ou trouver ce programme?.

    S'il est installé de manière standard, est-il dans le path ?

    S'il est installé dans un dossier Windev, possible que le chemin par défaut lorsque tu lance 'steghide' soit différent lorsque tu es en mode debug ou en mode exe.

    Essaye avant le LanceAppli d'affiché le dossier en cours. fRepEncours() de mémoire.

    P.S.: Utilise la balise "code" quand tu colle du code dans ton message, ça sera plus lisible.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    J'ai bien inséré l'instruction :
    info (fRepexe() + " " + fRepEnCours()).
    et j'ai bien obtenu le bon nom de dossier dans les deux cas (modes test et compilé).
    Je précise que pour simplifier le programme steghide se trouve dans le même dossier exe que mon programme Windev 17. Ce dossier contient également tout le framework.
    Cette technique me permet de développer des applis portables (sans installation) pouvant être activées depuis un élément extérieur ou non au PC hôte (clé usb, disque dur externe, etc...).
    J'ai fait également des essais en créant un dossier d:\essai et en copiant l'ensemble des programmes, données et framework et en écrivant en toutes lettres dans le programme lui-même le nom du chemin (d:\essai\steghide.exe etc...) mais cela n'a rien changé.
    Je sèche. Merci pour votre aide.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonsoir.
    Tu peux essayer avec un thread.
    Mais je préfère un timer et une procédure qui vérifie le résultat rendu par le programme externe et qui rend la main à l'utilisateur quand le résultat est obtenu. Au début j'ouvre une fenêtre d'information avec une animation pour le faire patienter.

  8. #8
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je ne vois pas d'où viens ton problème. Je viens de créer un exe de test avec juste ce code dans le code du projet et ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SI LigneCommande() = "/info" ALORS
    	Info("Dans l'exe avec /info")
    SINON
    	Info("Avant lancement fils")
    	LanceAppli(ExeInfo(exeNom) + " /info", exeActif, exeBloquant)
    	Info("Après lancement fils")
    FIN
    J'ai bien dans l'ordre :
    - "Avant lancement fils"
    - "Dans l'exe avec /info"
    - "Après lancement fils"

    P.S. : Il faut bien sûr compiler et lancer l'exe et pas tester en exécution dans l'environnement Windev, vu que l'exe se relance lui même.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonjour
    Comme je disais, moi aussi j'ai souvent la même situation.
    Un programme externe doit produire un fichier comme résultat.
    Si le processus est trop long, Windev reprend la main trop vite.
    Il faut donc tester l'existance du fichier résultat externe, puis continuer le programme Windev.
    Dans mon cas, je le fais comme indiqué plus haut.

    Exemple:
    Fenetre FEN_ACTUALISER:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Ouverture de la fenêtre FEN_ACTUALISER
    SI PAS Timer("TestFichier",10,2) ALORS
       Erreur("Creation du timer impossible")
    FIN
    PROCEDURE TestFichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    PROCEDURE TestFichier()
    //Code de la procédure TestFichier() appelée par timer
    SI fFichierExiste("FichierResultat") ALORS
     Ferme("FEN_ACTUALISER")
     FinTimer(2)
    FIN

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    J'ai bien essayé le programme donné par Delphimaniac mais je n'ai obtenu que 2 messages sur les 3 comme indiqué dans son message à savoir :
    -Avant lancement fils
    -Après lancement fils
    On voit que le lanceappli ne s'est pas activé.
    Mon système est Windows Seven Integral. Ce dis-fonctionnement serait-il dû à Windows?
    Merci pour votre aide

  11. #11
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Citation Envoyé par mahmgm Voir le message
    Bonjour,
    J'ai bien essayé le programme donné par Delphimaniac mais je n'ai obtenu que 2 messages sur les 3 comme indiqué dans son message à savoir :
    -Avant lancement fils
    -Après lancement fils
    On voit que le lanceappli ne s'est pas activé.
    Mon système est Windows Seven Integral. Ce dis-fonctionnement serait-il dû à Windows?
    Merci pour votre aide
    Si tu n'as eu que 2 messages, c'est qu'a priori, tu as lancé le programme en mode test et pas lancé l'exe.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonsoir
    J'ai reproduis ton code en l'adaptant:

    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
    LProg est une chaîne
    FichierImage est une chaîne = ".\Koala.jpg"
    FichierMessage est une chaîne = ".\TXT2IMG.TXT"
    SaisieCode est une chaîne = "PASSWORD"
     
    LProg = ".\steghide.exe embed -cf "
    LProg = LProg + fCheminCourt(FichierImage) + " -ef "
    LProg = LProg + fCheminCourt(FichierMessage)
     
    SI SansEspace(SaisieCode) <> "" ALORS
     // Caract(34) donne le caractère "
     LProg = LProg + " -p " + Caract(34) + SansEspace(SaisieCode) + Caract(34)
    SINON
     LProg = LProg + " -p " + Caract(34) + Caract(34)
    FIN
    LProg = LProg + " -q"
     
    Sablier()
    LanceAppli(LProg,exeIconise,exeBloquant)
    //Multitâche(1000) N'EST PAS NECESSAIRE
    Sablier(Faux)
    Cela fonctionne parfaitement.
    Je suis en WD 15.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Merci Yusep pour le code transmis.
    Je l'ai essayé en le recopiant tel quel et il ne fonctionne pas . Mon programme fonctionnait sous Windev 15 également et même sous Windev 10 (ma première version).
    Merci également à DelphiManiac. Je précise pour lui que mes tests ne se sont pas faits en mode test mais à partir de l'exe sur deux PC différents dont un de type bureautique le plus standard sans logiciel Windev installé.
    Suivant la bonne idée de Yusep j'ai également modifié la ligne de commande d'appel du programme fils en ajoutant une re-direction pour créer un fichier par ">resul.txt" et tester la présence de ce fichier (celui-ci n'est pas crée) . Par contre si j'active cette commande dans une fenêtre DOS ce fichier est bien crée et contient quelques lignes indiquant un bon traitement.
    La solution de créer un thread ne peut, sauf erreur de ma part, pas être envisagée car elle n'est valable que pour l'activation d'une autre procèdure Windev et non l'exécution d'un exe externe.
    Voilà où j'en suis avec mes tests mais pour l'instant sans résultat.
    Merci quand même à tous.

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Je peux t'assurer que ce code fonctionne.
    La creation du fichier est instantannée.
    J'ai fait un bouton pour lire le texte caché. C'est OK aussi.
    Peut-être un problême avec Windows?

  15. #15
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Plutôt que de lancer directement ton exécutable, peux tu essayer de lancer un .bat qui lance ton exécutable et dans ton .bat tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "je passe ici" >> log.log
    <lancement de ton exécutable>
    pause
    Cela devrait te permettre de voir si ton bat se lance. Je te propose de faire cela en me disant que peut être il y a une erreur sur la ligne de commande que tu n'arrives pas à voir.

    J'ai eu pas mal de problème pour ma part en lancant des traitements par LanceAppli quand je passais en paramètres des paramètres contenant des espaces.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  16. #16
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Au cas ou, as tu tester la valeur de retour de lanceappli afin de savoir si lanceappli c'est bien lancé (avec l'affichage de ErreurInfo).
    On ne sait jamais.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  17. #17
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Merci à tous pour votre aide. J'avais essayé l'activation d'un fichier bat comme en parlait DelphiManiac et j'ai pu voir que la commande ne se lançait pas ( je comptais tester l'existence du fichier qui devait se créer par la redirection > mais celui-ci ne se créait qu'en mode test mais non à partir du programme exe compilé) alors que ce programme fonctionnait bien compilé sous Windev 10, 12, 14 et 15.
    C'est en réalisant sous Windev 17 un programme différent, mais utilisant également l'instruction LanceAppli, qui avait quelques problèmes d'exécution que j'ai re-testé cet ancien programme pour m'apercevoir qu'il buggait.
    Je suppose qu'il s'agit d'un problème Windev 17, au lieu d'ajouter des centaines de fonctions supplémentaires (bientôt on va se promener avec un Bottin et il va être plus rapide de réaliser un petit programme que de chercher une éventuelle fonction le réalisant!!!) à chaque version majeure ils feraient mieux de corriger les bugs, certains datant de la version 10!!!!!
    Pour mettre fin au problème je vais utiliser à nouveau Windev 15.
    Désolé de vous avoir dérangé. Cordialement.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/12/2014, 15h39
  2. Réponses: 3
    Dernier message: 13/11/2014, 19h28
  3. [Débutant] execution différente si programme compilé ?
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/06/2013, 21h12
  4. Réponses: 2
    Dernier message: 17/05/2002, 20h37
  5. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

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