2009-05-16 2 views
1

"실행"창에서 실행할 때 올바르게 작동합니다.ASP .NET 웹 응용 프로그램 내에서 새 프로세스로 실행할 때 mysqldump가 작동하지 않습니다.

cmd.exe /K mysqldump --add-drop-database --add-drop-table --user=root --password=thepassword --databases theDatabase > C:\Backup\theBackup.sql 

그러나 외부 프로세스를 호출하여 웹 응용 프로그램에서 실행하려고하면 동일한 명령이 실행되지 않습니다. theBackup.sql - - ... 이것은 내가 무엇을 얻을 흥미롭게

alt text http://img40.imageshack.us/img40/8121/mysqldumperror.gif

, 파일

ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/K mysqldump --add-drop-database --add-drop-table --user=root --password=thepassword --databases theDatabase > C:\Backup\theBackup" + ".sql"); 

Process p = Process.Start(processInfo); 

생성됩니다 만, 비어 :

여기에 코드입니다.

환경 변수 PATH 변수 문제가 아닙니다. mysqldump가 포함 된 MySql bin 디렉토리 경로가 환경 PATH 변수에 추가됩니다. 이를 확인하려면 ... 내가 명령 프롬프트를 열 경우, 위의 스크린 샷에서 언급 된 경로로 이동하여 다음과 같이 ... mysqldump는 명령을 수동으로,이 명령을 인식 입력

alt text http://img40.imageshack.us/img40/6879/mysqldumppathproper.gif

문제 다음 코드가 작동하기 때문에 mysqldump에만 해당된다.

ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/K ping stackoverflow.com"); 

무엇이 잘못 되었나요?

답변

3

내 생각에 ASP.NET이 실행되고있는 환경에서 MySQL에 대한 경로를 포함하도록 $ PATH 변수가 정의되어 있지 않습니다 (해당 사용자 또는 ASP.NET이 환경을 정리합니다).

두 가지 시도 :

  1. (작동 할 수 있습니다) MySQL의 디렉토리가 글로벌 경로에 추가되어 있는지 확인 -뿐만 아니라 사용자 별 PATH 변수를. (참고 : 적어도 IIS를 리사이징해야합니다. 재부팅하면 효과가 나타납니다.)
  2. mysqldump에 대한 완전한 경로를 사용하십시오 (경로의 공백을 인용하거나 이스케이프 처리해야 할 작업이 필요할 수 있습니다).
+0

도 – Sameet

+0

당신이 경로를 인용하거나 그것에 공백을 탈출 확인 했습니까? –

+0

가 함께 일한 (바로 대답을 덧붙였다) :-(일 완전한 경로 - 이스케이프 스페이스 :-) 감사합니다. – Sameet

0

mysqldump를

에 대한 exemple
Private sw As IO.StreamWriter 

Public Sub ExecuteBackup() 
    Try 

     Dim mysqlDump As New Process 
     mysqlDump.StartInfo.FileName = "PahtToMysqlDump\mysqldump.exe" 
     mysqlDump.StartInfo.Arguments = "--user=myuser --password=mypassword --routines --all-databases" 
     mysqlDump.StartInfo.RedirectStandardOutput = True 
     mysqlDump.StartInfo.CreateNoWindow = True 
     mysqlDump.StartInfo.UseShellExecute = False 

     Console.WriteLine("Arguments:") 
     Console.WriteLine("mysqldump.exe " & mysqlDump.StartInfo.Arguments) 

     sw = New IO.StreamWriter("backup.sql") 

     AddHandler mysqlDump.OutputDataReceived, AddressOf mysqlDumpNewData 

     mysqlDump.Start() 
     mysqlDump.BeginOutputReadLine() 
     mysqlDump.WaitForExit() 

     sw.Close() 

     Console.WriteLine("Backup completed") 

    Catch ex As Exception 
     Console.WriteLine("BackupEngine.ExecuteBackup.", ex)   
    End Try 
End Sub 

Private Sub mysqlDumpNewData(sender As Object, e As DataReceivedEventArgs) 

    Dim line = e.Data 
    If line IsNot Nothing Then 
     sw.WriteLine(line) 
     If line.StartsWith("USE") Then 
      Dim ln = line.Split("`")(1) 
      Console.WriteLine("Database : " & ln.ToUpper) 
     End If 
     If line.StartsWith("CREATE TABLE") Then 
      Dim ln = line.Split("`")(1) 
      Console.WriteLine(" Table : " & ln.ToUpper) 
     End If 
    End If 

End Sub