2011-10-07 4 views
3

Je suis en train de sauvegarder la base de données en utilisant MySQL et C# en utilisant comme suit ...{ « Le nom du répertoire est invalide »} Win32Exception était non gérée

public static void backupDatabase() 
    { 
     Process sd = null; 
     ProcessStartInfo r1 = new ProcessStartInfo("C:\\Program Files\\MySQL\\MySQL Workbench 5.2 CE\\", "--databases=access --compress --routines --triggers --add-drop-database --add-drop-table --add-locks --extended-insert --port=3080 --user=root --disable-keys --quick --comments --complete-insert --result-file=DUMPEDOUTPUT.sql"); 

     r1.CreateNoWindow = true; 
     r1.WorkingDirectory = "C:\\Program Files\\MySQL\\MySQL Workbench 5.2 CE\\"; 
     r1.UseShellExecute = false; 
     r1.WindowStyle = ProcessWindowStyle.Minimized; 
     r1.RedirectStandardInput = false; 

     sd = Process.Start(r1); 
     sd.WaitForExit(); 

     if (!sd.HasExited) 
     { 
      sd.Close(); 
     } 
     sd.Dispose(); 
     r1 = null; 
     sd = null; 

    } 

a obtenu une exception à cette ligne sd = Process.Start(r1);

Exception :{"The directory name is invalid"} Win32Exception Was unhandled 

aurait tout un pls me aider les gars

Merci d'avance ..

Code modifié:

public static void backupDatabase() 
    { 
     Process sd = null; 
     ProcessStartInfo r1 = new ProcessStartInfo("MySQLWorkbench.exe", "--databases access --compress --routines --triggers --add-drop-database --add-drop-table --add-locks --extended-insert --port=3080 --user=root --disable-keys --quick --comments --complete-insert --result-file=DUMPEDOUTPUT.sql"); 

     r1.CreateNoWindow = true; 
     r1.WorkingDirectory = @"C:\Program Files\MySQL\MySQL Workbench 5.2 CE\MySQLWorkbench.exe"; 
     r1.UseShellExecute = false; 
     r1.WindowStyle = ProcessWindowStyle.Minimized; 
     r1.RedirectStandardInput = false; 

     sd = Process.Start(r1); 
     sd.WaitForExit(); 

     if (!sd.HasExited) 
     { 
      sd.Close(); 
     } 
     sd.Dispose(); 
     r1 = null; 
     sd = null; 

    } 

Je reçois même erreur sur la même ligne ..

+2

Je ne peux pas voir un nom de fichier exécutable dans 'ProcessStartInfo' ... est-ce le cas? – Lyth

+1

Ajoutez un point d'arrêt sur cette ligne, vérifiez que la même valeur peut être utilisée à partir de la ligne de commande. Vous devez au moins tenter de résoudre ce problème par vous-même. Vous devez utiliser ce qui a été réellement suggéré dans ce fil http://stackoverflow.com/questions/7686256/how-to-backup-the-database-using-mysql-and-c-net –

+0

Bit déçu que vous avez ouvert un nouvelle question plutôt que suivi avec la réponse à la question initiale que vous avez ouverte. J'ai fourni des indices dans le code que j'ai fourni où vous deviez entrer le chemin vers votre propre copie de mysqldump.exe - dans cette version modifiée ci-dessus vous avez seulement entré le chemin vers MySQL Workbench, qui n'est pas l'outil de sauvegarde dont vous avez besoin cible. Vous devez toujours avoir installé MySQL sur la machine pour laquelle vous voulez exécuter ce code. – simbolo

Répondre

2

Le premier paramètre à la ProcessStartInfo doit être l'exécutable que vous souhaitez exécuter. En ce moment vous avez pointant vers un répertoire

new ProcessStartInfo("C:\\Program Files\\MySQL\\MySQL Workbench 5.2 CE\\", ... 

Il devrait probablement être

new ProcessStartInfo(
    @"C:\Program Files\MySQL\MySQL Workbench 5.2 CE\MySQLWorkbench.exe", ... 

Vous pouvez également spécifier le chemin en utilisant @ en face de la chaîne de sorte que vous ne devez les backslashs . Comme ceci:

new ProcessStartInfo(@"C:\Program Files\MySQL\MySQL Workbench 5.2 CE\", ... 

Update 1

Une autre chose à essayer, puisque vous spécifiez déjà le répertoire de travail, il suffit de mettre le nom de l'exécutable dans le ProcessStartInfo

new ProcessStartInfo("MySQLWorkbench.exe", ... 

Update 2 Je viens de remarquer que vous avez ajouté le nom de fichier exe t o WorkingDirectory. Cela devrait juste être le répertoire:

Process sd = null; 
ProcessStartInfo r1 = new ProcessStartInfo("MySQLWorkbench.exe", ...); 

r1.CreateNoWindow = true; 
r1.WorkingDirectory = @"C:\Program Files\MySQL\MySQL Workbench 5.2 CE"; 

Mais je pense que le problème est probablement les autorisations. Ma conjecture est l'utilisateur actuel n'a pas d'autorisations à ce chemin de fichier.

+0

Vos deux exemples sont exactement les mêmes. Je réponds à sa question, même si je l'admets, c'est une question extrêmement médiocre et ne montre aucun effort de sa part pour le résoudre par lui-même –

+0

@Ramhound - Je montrais l'utilisation du symbole '@'. ce que je pense devrait résoudre le problème du PO – SwDevMan81

+1

Ceci répond à sa question: le premier paramètre de 'ProcessStartInfo' doit être un fichier pouvant être lancé, comme indiqué dans son exemple, son second exemple est l'utilisation du symbole' @ '. –

Questions connexes