Process bis [Résolu]

Signaler
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008
-
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008
-
Tout d'abord bonjour à tous

Je m'adresse à vous car j'ai un souci à propos d'un processus.

Lorsque je l'exécute dans une fenêtre dos elle fonctionne correctement mais lorsque j'utilise mon processus j'ai une erreur avec un exit code ayant la valeur égale à 1.

Voici la commande que je souhaiterais exécuter



mysql.exe
-u root -pMDP maBase < « C:\Sauvegardes\maBase.bak »<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Merci pour vos suggestions.

27 réponses

Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Salut,

Ben, pendant mes testes c'est la lecture du fichier .bak qui prenait du temps (environ 30 sec. pour 342 Mo) Par contre après, le traitement de sqlMaint.exe était assez rapide (pas plus de 10 sec.)

J'ai remarqué aussi que le fichier .bak n'était pas architecturé en ligne, par là je veux dire qu'une seule ligne peut faire plus d'un Mo. je me demande donc si la lecture de ce fichier ne devrait pas être faite packet par packet... à voir

Mais cela n'explique pas le "blocage" de ton process.
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Salut Paladin,

Je ne connait pas cette syntaxe ... < "..." !
Ca sert à rediriger la sortie de "C:\Sauvegardes\maBase.bak" vers la connexion à ta base de données ???
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

oui c'est bien ca
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

euh non pardon en fait c'est pour rediriger vers ma base mysql sinon le cycle serait de l'autre coté
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Et es-tu sûr que cette syntaxe ne fait pas la même chose ??
(désolé si je me trompe... je ne connais pas du tout mysql !!) :

mysql.exe

-u root -p MDP maBase "C:\Sauvegardes\maBase.bak"

Dans ce cas, ceci devrait faire l'affaire :
Process.Start( "


mysql.exe


", "






-u root -p MDP maBase "C:\\Sauvegardes\\maBase.bak"


" );
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

oui je viens d'essais cette commande directement en dos sans ce caractère '<' mais sans succès.
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Tu vas m'adorer ^^

En fait, [auteur/LEPROV/311556.aspx leprov] avait raison... (dans ton premier post) il faut rediriger l'entrée standard !!
Je comprend parfaitement le sens du symbole < maintenant.

Il faut donc faire, dans ton cas :

ProcessStartInfo procInfo = newProcessStartInfo( "

mysql.exe


", "-u root -p MDP maBase" );
procInfo.CreateNoWindow = false;
procInfo.UseShellExecute = false;
procInfo.RedirectStandardInput = true;

Process proc = newProcess();
proc.StartInfo = procInfo;
proc.Start();

StreamReader bakFileReader = newStreamReader( File.Open( "C:\Sauvegardes\maBase.bak

", FileMode.Open, FileAccess.Read, FileShare.Read ) );

proc.StandardInput.AutoFlush = true;
while( !bakFileReader.EndOfStream )
    proc.StandardInput.WriteLine( bakFileReader.ReadLine() );

proc.WaitForExit();
bool isOK ( proc.ExitCode 0 );

Chez moi ça marche nikel (avec sqlMaint.exe qui as une syntaxe similaire ) c'est juste bcp plus long qu'avec la ligne de commande !!! Mais en même temps, tu peux indiquer l'état de la progression dans

while( !bakFileReader.EndOfStream )
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

ok merci pour ton aide, pour ton investissement.

Good job.

En fait Tu viens de m'apprendre qu'il faut lire le fichier bak pour que sa fonctionne.

Seulement j'ai essayé ton code mais sa me retourne encore 1 en proc.ExitCode.
Mais je pense être à nouveau sur le bonne voie. 

Je te tiens au courant.
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

non sa ne fonctionne pas :s

Je pense que l'origine du problème est que je en sais pas interpréter le caractère '<'.

J'ai regardé ton code et surtout la méthode sqlMaint que tu avais utilisé, elle ne requière pas ce caractère
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Mais de rien, ça me permet d'apprendre aussi
par exemple, je n'avait jamais redirigé d'entrée standard d'un processus... c'est chose faite.

Sinon, pour ton erreur, as-tu bien enlevé "


< C:\Sauvegardes\maBase.bak



" de la ligne d'arguments passé au constructeur de

ProcessStartInfo ??
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Si si,

C'est exactement la même syntaxe !!
C'est pour ça que je m'étonne que ça ne passe pas chez toi !

Par la ligne de commande je dois écrire :


sqlmaint.exe -U ** -P ***** -D maBase < "D:\Backup\LPMLocal.bak"





Et par code exactement ce que je t'ai écrit execpté :






new
ProcessStartInfo( "C:\\Program Files\...\

sqlmaint.exe


", "-U ** -P ***** -D maBase" );

et le chemin vers le fichier .bak bien sûr !!

Sinon qu'obtiens-tu dans la sortie standard après exécution ?
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

Oui bien sur.

Je vois bien le contenu de mon fichier qui défile mais rien n'y fait le code de retour reste continuellement 1 bizarrement. Et ma base ne se restaure pas
:s 
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

Oui bien sur.

Je vois bien le contenu de mon fichier qui défile mais rien n'y fait le code de retour reste continuellement 1 bizarrement. Et ma base ne se restaure pas
:s 
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

Oui bien sur.

Je vois bien le contenu de mon fichier qui défile mais rien n'y fait le code de retour reste continuellement 1 bizarrement. Et ma base ne se restaure pas
:s 
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

J'obtiens l'aide de la commande.
Comme si tu faisais sqlmaint --help
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Si tu obtiens l'aide de la commande, c'est qu'il reste une erreur de syntaxe
Du coup

mysql.exe ne tente même pas de restaurer la base puisqu'il ne comprend pas ce qu'on lui demande de faire...

Pourrais-tu poster ton code ou me l'envoyer par message privé ?
(modifie quand même les login/mot de passe)
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

En fait ta syntaxe n'est pas tout a fait comme la tienne.

La tienne :
sqlmaint.exe -U ** -P ***** -D maBase < "D:\Backup\LPMLocal.bak"

newProcessStartInfo( "C:\\Program Files\...\sqlmaint.exe", "-U ** -P ***** -D maBase" );

La mienne :



mysql.exe -u sa -p*** maBase< "C:\Backup\LPMLocal.bak"
new
ProcessStartInfo('"' + @"C:\Program Files\....\mysql.exe"
 + '"', "-u sa -p*** maBase");




 
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

Pourtant si je met la syntaxe dans la fenetre dos elle fonctionne parfaitement.
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Dans ton code, tu as bien mis un espace après -p ?!!??
Messages postés
154
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
5 septembre 2008

non sinon dans la fenetre dos sa fonctionne pas.
Mais je vais essayer sur le champ ton hypothèse