Process bis

Résolu
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 - 26 août 2008 à 10:30
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 - 29 août 2008 à 09:22
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

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
28 août 2008 à 09:21
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.
3
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
26 août 2008 à 10:58
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 ???
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 11:11
oui c'est bien ca
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 11:39
euh non pardon en fait c'est pour rediriger vers ma base mysql sinon le cycle serait de l'autre coté
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
26 août 2008 à 11:57
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"


" );
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 13:09
oui je viens d'essais cette commande directement en dos sans ce caractère '<' mais sans succès.
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
26 août 2008 à 14:15
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 )
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 14:48
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.
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 15:46
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
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
26 août 2008 à 15:46
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 ??
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
26 août 2008 à 15:58
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 ?
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 16:14
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 
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 16:15
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 
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 16:18
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 
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 16:38
J'obtiens l'aide de la commande.
Comme si tu faisais sqlmaint --help
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
26 août 2008 à 16:46
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)
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 16:49
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");




 
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 16:56
Pourtant si je met la syntaxe dans la fenetre dos elle fonctionne parfaitement.
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
26 août 2008 à 17:04
Dans ton code, tu as bien mis un espace après -p ?!!??
0
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
26 août 2008 à 17:07
non sinon dans la fenetre dos sa fonctionne pas.
Mais je vais essayer sur le champ ton hypothèse
0
Rejoignez-nous