Delphi et fichier batch

nraloux Messages postés 30 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 26 février 2010 - 2 déc. 2008 à 13:31
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 10 déc. 2008 à 09:14
Salut a tous,
Je suis entrain de faire un CD personnalisé de Windows Xp,et je suis a la phase d'installation de logiciel, mon problème se situe a ce niveau:
Comment faire interagir l'application delphi avec le fichier batch? je m'explique :si je veux installer les applications ccleaner et unlocker par exemple mon fichier batch comprendra les lignes suivantes

@echo off
echo Installation des applications
echo.
echo installation de ccleaner
start /wait %systemdrive%\APPLI\ccleaner\ccleaner.exe /S
echo. installation de unlocker
start /wait %systemdrive%\APPLI\unlocker\unlocker.exe /S
echo.

le /wait permet de faire a ce qu'une instalation soit terminé avant de poursuivre la suivante alors comment faire a ce que dans l'interface de mon appli delphi ce changement d'etat du fichier batch s'effectue aussi dans mon appli delphi?
Merci pour vos reponses.
cela me debloquerais bien dès choses.

4 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 déc. 2008 à 14:08
Salut,

Ca sent très fort le CreateProcess et le WaitForSingleObject.

Tu peux même te débarasser de la parti batch si tu le souhaite, en mettant directement tes lignes de commande en deuxième parmètre de CreateProcess.
<hr size="2" width="100%" />procedure TForm1.Button1Click(Sender: TObject);
var
  processInfo: TProcessInformation;
  startupInfo: TStartupInfo;
begin
  ZeroMemory(@startupInfo, SizeOf(TStartupInfo));
  startupInfo.cb:= SizeOf(TStartupInfo);
  startupInfo.dwFlags:= STARTF_USESHOWWINDOW;
  startupInfo.wShowWindow:= SW_HIDE;

  if not CreateProcess(nil, 'c:\test.bat toto',
                       nil, nil, False, 0, nil, nil,
                       startupInfo, processInfo) then RaiseLastOSError;

  WaitForSingleObject(processInfo.hProcess, INFINITE);

  CloseHandle(processInfo.hProcess);
  CloseHandle(processInfo.hThread);
end;
0
nraloux Messages postés 30 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 26 février 2010
7 déc. 2008 à 10:58
Merci pour ta réponse

[../auteur/RT15/464943.aspx rt15] et d'aussi d'avoir repondu si rapidement, mais j'ai un soucis, comment savoir que nous sommes dans tel ou tel installation dans le fichier batch pour pouvoir modifier l'executable?
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
7 déc. 2008 à 19:16
Alors là, je n'ai mais alors rien compris à ce que tu me demandes...

Au hasad :

Pour déterminer le répertoire du .exe en Delphi, on peut utiliser ça :
ExtractFileDir(Application.ExeName)

En batch, on peut utiliser %CD% pour connaitre le répertoire courant. Par contre, impossible de savoir l'emplacement du .bat en cours d'exécution.
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
10 déc. 2008 à 09:14
salut,

avant de t'énerver avec des fichiers batch, jettes un oeil ici:
http://www.innosetup.com/isinfo.php

c'est simple, puissant, multi-lange et gratuit.

a+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Rejoignez-nous