Bonjour,
Je vais peut-être vous paraître fort ignorant, mais j'ai un soucis avec un fichier .bat que je voudrais lancer à partir d'une application Delphi XE2.
En voici le contenu qui sert à convertir 3 messages d'un fichier Gib (Météorologiques) en 3 fichiers .csv à travers un exécutable degrib.exe.
Le batch, l'exe et le fichier à convertir se situent dans un sous répertoire WX de mon application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 degrib.exe Grib.grb2 -C -msg 1 -Csv -Unit m -Decimal 0 degrib.exe Grib.grb2 -C -msg 2 -Csv -Unit e -Decimal 0 degrib.exe Grib.grb2 -C -msg 3 -Csv -Unit e -Decimal 0
Le batch fonctionne parfaitement sur un double clic et les fichiers csv sont bien générés.
A partir de mon application, voici ce qu j'otiens grâce à une pause dans le batch:
Voici maintenant comment je lance le 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 D:\Projet Delphi\CPS\Win32\Debug>degrib.exe Grib.grb2 -C -msg 1 -Csv -Unit m -De cimal 0 'degrib.exe' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes. D:\Projet Delphi\CPS\Win32\Debug>degrib.exe Grib.grb2 -C -msg 2 -Csv -Unit e -De cimal 0 'degrib.exe' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes. D:\Projet Delphi\CPS\Win32\Debug>degrib.exe Grib.grb2 -C -msg 3 -Csv -Unit e -De cimal 0 'degrib.exe' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes. D:\Projet Delphi\CPS\Win32\Debug>pause Appuyez sur une touche pour continuer...
J'ai parcourus des dizaines de sujets sur ce type de problème, mais aucun ne m'a proposé de solution ou de piste satisfaisante.
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 function RunAndWait(const FileName: String): DWORD; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin Result := STILL_ACTIVE; GetStartupInfo(StartupInfo); if CreateProcess(nil, PChar(FileName), nil, nil, IsConsole, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then try if WaitForSingleObject(ProcessInfo.hProcess, INFINITE) = WAIT_OBJECT_0 then GetExitCodeProcess(ProcessInfo.hProcess, Result); finally CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); end; end; ........ Req :=extractFilePath(application.exename)+ 'WX\csv.bat'; RunAndWait(Req); ........
Je viens donc humblement solliciter votre aide.
Merci par avance.
Cordialement
Pierre
Partager