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

API, COM et SDKs Delphi Discussion :

Lancement exécutable en batch


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 32
    Par défaut Lancement exécutable en batch
    Bonjour,
    J'espère que je poste au bon endroit ! Mon problème est qu'à partir d'un script en batch, j'essaye de lancer un programme Delphi mais que celui ci ne tourne pas comme je le voudrais. Individuellement, le programme Delphi fonctionne très bien mais dans le script, rien ne se passe.

    J'ai pu repérer le problème. Je pense qu'il vient de la recherche des .ini. Ca ne doit pas fonctionner correctement et du coup la TStringList se retrouve vide et rien ne se passe. Seulement je n'ai pas trouvé pourquoi elle ne fonctionne pas à partir du batch.
    Le code Delphi
    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
    65
    66
    const
      C_Command_Call = 'call "%s\rsvars.bat"';
      C_Command_Compile = 'msbuild %s /target:Build /p:config=Release';
      C_Path_U_Abstract = 'U_Abstract\';
    var
      sPath : String;
      sInitial : String;
      rProject, rObj : TDll_Project;
      sText, sParam, sAbsolute : string;
      srIniFile : TSearchRec;
      i , j : Integer;
      SL : TStringList;
    begin
      sAbsolute := ExpandFileName(C_Path_U_Abstract);
      if ParamStr(1) = '' then
      begin
        SL := TStringList.Create;
        try
          if FindFirst(sAbsolute + '*.ini', faAnyFile, srIniFile) = 0 Then
          begin
            repeat
              SL.Add(srIniFile.Name);
              WriteLn(srIniFile.Name);
            until FindNext(srIniFile) <> 0;
          end;
     
          j := 0;
          while j < SL.Count do
          begin
            //WriteLn(SL[j]);
            rObj := TDll_Project.Create(sAbsolute + SL[j]);
            sInitial := '';
            sPath := '';
            rProject := TDll_Project(rObj);
            sInitial := SysUtils.GetEnvironmentVariable('Path');
            for i := 1 to Get_TokenCount(sInitial,';') do
            begin
              if ContainsStr(Get_Token(sInitial,i,';'),'CodeGear') or ContainsStr(Get_Token(sInitial,i,';'),'Embarcadero')  then
                sPath:= Get_Token(sInitial,i,';');
            end;
            Enable_XML_Generation(replaceStr(rObj.sPath_DPR,'.dpr','.dproj'));
            Execute(ExpandFileName('U_Abstract\Compiler.bat'),'"'+sPath+'\rsvars.bat" "'+replaceStr(rProject.sPath_DPR,'.dpr','.dproj')+'"',ExtractFileDir(rProject.sPath_DPR),True,True);
            rProject.Analyze;
     
            try
              WriteLn('Writing a backup of the existing files');
              CopyFile(PWideChar(rProject.sPath_DPR),PWideChar(rProject.sPath_DPR+'.bak'),false);
              CopyFile(PWideChar(rProject.sPath_U_Abstract),PWideChar(rProject.sPath_U_Abstract+'.bak'),false);
              Write_U_Abstract_Dpr(rProject,nil);
              Write_U_Abstract(rProject,nil);
            except
              on E: Exception do
              begin
                Writeln(E.Classname, ': ', E.Message);
                raise;
              end;
            end;
            inc(j);
          end;
     
        finally
          SL.Free;
        end;
      end
      else
    [...]
    Et le batch qui est censé appeler le programme ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    echo Abstract ...
    echo.
    ..\..\..\TEEXUtils\Generate_U_Abstract.exe
    Je précise que les chemins sont corrects normalement (en tout cas, quand j'ajoute un Write, je le vois s'écrire. Et pour le chemin des .ini, ça fonctionne sans batch, doit pas y avoir de problème dessus)
    Merci d'avance pour vos réponses !

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Citation Envoyé par Weirdy Voir le message
    Je précise que les chemins sont corrects normalement (en tout cas, quand j'ajoute un Write, je le vois s'écrire. Et pour le chemin des .ini, ça fonctionne sans batch, doit pas y avoir de problème dessus)
    Merci d'avance pour vos réponses !
    "normalement" ça veut dire "théoriquement" ?

    ExpandFileName utilise le GetCurrentDir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sAbsolute := ExtractFilePath(Application.ExeName) + C_Path_U_Abstract;
    Il y a un risque de que le chemin en Cours soit celui du BAT et non de l'EXE
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 32
    Par défaut
    D'accord mais je l'ai ajouté parce que je pensais qu'il y avait un soucis avec les chemins justement. Ca ne marchait déjà pas avant. Et sinon je dis normalement car j'ai essayé de les tester en debug mais bon quand j'exécute le batch, je me dis que peut-être ce n'est pas pareil sauf que là je ne peux pas tester

Discussions similaires

  1. [TP] Commande exec : exécuter un batch de manière invisible
    Par freezerhm dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 18/03/2007, 14h18
  2. [batch] Exécuter un batch à distance
    Par sephiburp dans le forum Windows
    Réponses: 2
    Dernier message: 03/01/2007, 21h40
  3. [Système] Exécuter fichier batch
    Par gogolak dans le forum Langage
    Réponses: 6
    Dernier message: 10/05/2006, 11h04
  4. Lancement d'un batch Dos "silencieusement"
    Par jeff37 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 08/03/2006, 17h39
  5. [MFC] Lancement de fichier batch
    Par spirit_1999 dans le forum MFC
    Réponses: 28
    Dernier message: 01/06/2005, 11h21

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