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

Delphi Discussion :

batch impossible à lancer


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut batch impossible à lancer
    Bonjour,

    Je cherche à lancer un batch windows2003 depuis delphi 7.0. J'ai repris les expication de la FAQ avec SellExectute mais ça ne lance pas le batch, et pas d'erreur !

    http://www.developpez.com/delphi/faq...interexecution

    1 - J'ai bien mis le shellAPI dans la clause uses
    2 - DELPHI ne reconnait pas SW_SHOW, mais je peux le remplacer par 0
    3 - Je peux lancer un .exe comme ça:

    ShellExecute(0,'OPEN','C:\7-Zip\7zFM.exe', Nil, Nil, 0);

    4 - Mais pas un batch, enfin pas comme ça:

    ShellExecute(0,'OPEN','C:\batch.bat', Nil, Nil, SW_SHOW);

    ShellExecute(0,'OPEN','C:\WINDOWS\system32\cmd.exe c:\batch.bat', Nil, Nil, SW_SHOW);

    ShellExecute(0,'open',PChar(GetEnvironmentVariable('ComSpec')),
    '/C c:\batch.bat,'c:\',0);

    rien ne marche, alors si quelq'un peux m'aider merci bien !

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Je n'ai jamais lancé de batch avec shellexecute

    Mais dans ton batch, s'il y a un lancement de programme, il est possible que le batch passe à la suite, se ferme sans attendre la fin de l'appli lancée, auquelle cas, pour peu que ce soit aussi une appli dos est fermée aussi prématurément.

    Si c'est le cas, dans ton batch, essaye de placer un "CALL " devant le lancement de ton prog. il a pour effet d'attendre la fin du prog lancé, avant de passer à la suite des commandes.

    Sinon bah... j'aurais essayé
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    J'ai testé la méhode ci dessous et ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(Application.Handle,'open',PChar(GetEnvironmentVariable('ComSpec')),'/C c:\bin\batch.bat','c:\',SW_SHOW);
    Dans ton fichier Batch.bat, après avoir tout exécuté, met un pause. Comme ca, la console reste ouverte et tu peux voir les erreurs s'il y en a!

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Ok, j'ai ajouté une pause dans mon batch, et s'il était lancé il me crérait un répertoire,donc je pourrais le voir.

    Par contre delphi avec la méthode que tu as testé, mon delphi ne reconnait pas l'identificateur "Application.handle"(probablement car je code une dll ISAPI), donc je le remplace par "0", j'ai vu qu'on peux le faire dans la FAQ. Après c'est SW_SHOW qui n'est pas identifié, il ne le reconnait pas ! Je peux pas compiler, alors je lui donne un entier, 0 pour HIDDEN... ou 5 ( a priori == SH_SHOW) et il ça compile mais il ne se passe rien à l'execution.

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    ShellExecute(0,'open',PChar(GetEnvironmentVariable('ComSpec')),'/C c:\batch.bat','c:\',0);

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    La constante SW_SHOW est définie dans l'unit Windows (SW_SHOW = 5).
    L'objet TApplication est définie dans l'unit Forms.

    @+

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    C'est bizzard!

    En utilisant exactement la même ligne de commande que la tienne c'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     	ShellExecute(0,'open',PChar(GetEnvironmentVariable('ComSpec')),'/C c:\batch.bat','c:\',0);
    Et en ayant dans mon fichier batch.bat (qui se trouve dans C:\) ceci :

    Il me crée bien mon dossier Truc à la racine du disque (C:\).
    L'erreur vient-elle pas d'ailleurs?
    Ton fichier batch par exemple?

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Effectivement, il est possible de faire comme ça depuis une application,ça marche aussi chez moi (ouf !)

    Par contre mon code est dans une dll ISAPI et là il ne se passe rien, je peux lancer un executable depuis la dll, mais pas un batch, et toujours pas d'erreur remontée !

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2003
    Messages : 110
    Points : 109
    Points
    109
    Par défaut
    essaye avec CreateProcess

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2003
    Messages : 110
    Points : 109
    Points
    109
    Par défaut
    tien un exemple avec un exe console, focntionnement idem que pour un batch :

    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
    var
      FProcessInfo : TProcessInformation; // Process exécutant la commande
     
    function Lancer(aExe : String) : boolean;
    var
      StartupInfo:TStartupInfo;
    begin
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
     
      //Lancer le process si pas encore lancé
      if FProcessInfo.hProcess = 0 then
        Result := CreateProcess(nil, PChar(aExe), nil,nil,True,0, nil,nil, StartupInfo, FProcessInfo)
      else
        Result := True;
    end;
     
    function Arreter : boolean; //si tu as besoin de tuer ton lancement.
    begin
      Result := TerminateProcess(FProcessInfo.hProcess,99);
    end;

  11. #11
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    J'essaierais bien cette méthode mais "TProcessInformation" il ne connait pas. Je n'ai absolument dans l'aide non plus, est-ce que tu sais dans quelle librairie ou quel composant il se trouve ?

  12. #12
    Membre régulier
    Inscrit en
    Janvier 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2003
    Messages : 110
    Points : 109
    Points
    109
    Par défaut
    Regarde dans Windows, je pense que c'est dedans car c'est une structure Windows.

Discussions similaires

  1. commande DOS impossible à lancer via fichier BATCH
    Par siekken dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 11/03/2009, 13h24
  2. [Applet] Impossible à lancer
    Par JamesP dans le forum Applets
    Réponses: 5
    Dernier message: 15/11/2006, 20h20
  3. Impossible lancer application en root
    Par alexp dans le forum Administration système
    Réponses: 15
    Dernier message: 26/04/2006, 22h52
  4. Réponses: 3
    Dernier message: 11/01/2006, 15h39
  5. [batch]comment lancer un excel avec son mot de passe?
    Par victor.ward dans le forum Windows
    Réponses: 1
    Dernier message: 05/12/2005, 10h10

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