2011-10-07 99 views
3

我想備份用mysql和C# 通過以下方式數據庫...{「目錄名無效」} Win32Exception了未處理

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; 

    } 

了在這條線的異常sd = Process.Start(r1);

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

會不會有人請幫助我的傢伙

許多在此先感謝..

修改代碼:

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; 

    } 

我收到同樣的錯誤在同一行..

+2

我在'ProcessStartInfo'中看不到可執行文件名......是這種情況嗎? – Lyth

+1

在該行上添加一個斷點,驗證可以從命令行使用相同的值。你至少需要嘗試自己解決這個問題。你需要使用這個線程中實際建議的內容http://stackoverflow.com/questions/7686256/how-to-backup-the-database-using-mysql-and-c-net –

+0

有點失望你已經打開了一個一個新的問題,而不是跟上你打開的原始問題的答案。我在我提供的代碼中提供了提示,您需要輸入自己的mysqldump.exe副本的路徑 - 在此修改版本中,您只輸入了MySQL Workbench的路徑,而不是您需要的備份工具目標。您仍然需要在要運行此代碼的計算機上安裝MySQL。 – simbolo

回答

2

ProcessStartInfo的第一個參數應該是要運行的可執行文件。現在你擁有了它指向的目錄

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

它可能應該是

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

您也可以指定地址的路徑名在前面的字符串使用@所以你不需要逃避反斜槓。就像這樣:

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

更新1

另一件事嘗試,因爲你已經指定的工作目錄,只是把可執行文件的名稱在ProcessStartInfo

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

更新2

只注意到你添加了exe文件名t o WorkingDirectory。這應該只是目錄:

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

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

但我認爲問題可能是權限。我的猜測是當前用戶不具有此文件路徑的權限。

+0

你的兩個例子是完全一樣的。他回答了他的問題,儘管我承認,這是一個非常糟糕的問題,他自己也沒有努力去解決這個問題。 –

+0

@Ramhound - 我展示了@符號的使用。我認爲應該解決OP的問題 – SwDevMan81

+1

這確實回答了他的問題,'ProcessStartInfo'的第一個參數需要是一個可啓動的文件,如他的例子中所述。他的第二個例子是使用'@'符號。 –