2010-01-10 5 views
1

MySql에서 백업을 복원합니다. 그러나 mysql exe는 종료되지 않습니다. 이 내 코드입니다 -C# - 프로세스가 종료되지 않습니다.

public override bool FullRestore(Stream fileStream) 
    { 
     try 
     { 
      ProcessStartInfo proc = new ProcessStartInfo(); 
      string cmd = string.Format("--database {0} --user={1} --password={2}", config.GetDbName(), config.GetUserName(), config.GetPassword()); 
      proc.FileName = "mysql"; 
      proc.RedirectStandardInput = true; 
      proc.RedirectStandardOutput = false; 
      proc.Arguments = cmd; 
      proc.UseShellExecute = false; 
      proc.CreateNoWindow = true; 
      Process p = Process.Start(proc); 
      Stream stream = p.StandardInput.BaseStream; 
      Stream file = Utility.ZipNEncrypt.Unzip(fileStream, "XXXXXX"); 
      byte[] bytes = new byte[1024]; 
      for (int count = 0; (count = file.Read(bytes, 0, 1024)) > 0;) 
      { 
       stream.Write(bytes, 0, count); 
      } 
      stream.Flush(); 
      p.WaitForExit(); 
      file.Close(); 
      return true; 
     } 
     catch (Exception e) 
     { 
      System.Windows.Forms.MessageBox.Show(e.ToString()); 
      return false; 
     } 
    } 

내 백업 방법은 잘 작동하지만,이 방법은 작동하지 않습니다

제안 (그들은 많은 유사한 차이가있다).?

+2

'while'루프에 대해 가지고있는 점은 무엇입니까? –

+0

나는 매우 편안하다. –

+0

Jayanta : 제목에 "Closed"를 추가하지 말고 대답을 수락하거나 닫기 버튼을 누릅니다. –

답변

0

코드는 어디에 있습니까? 짐작할 수 있듯이, 입력 스트림 (fileStream)에는 EOF (다른 프로세스의 들어오는 파이프 또는 네트워크 스트림입니까?)가 없으므로 현재 끝날 때 Read을 기다리고 있습니다. 데이터. 들어오는 스트림을 닫으시겠습니까?

당신에게 (이 fileStream를 호출 할 수도 있지만 나는 그것이 실제로 파일/FileStream이라는 가정을 아니에요 ... 나는 ;-p 전에 이러한 가정에 의해 물린 것) 적절한 경우 using을 소개하는 것도 좋습니다 (file, 아마도). 더 입력을 기대되기 때문에

stream.Close(); 
p.WaitForExit(); 

그렇지 않으면, 프로그램이 종료되지 않습니다

+0

"fileStream"은 압축 파일입니다. 나는 그것을 검사했다. 괜찮아. –

6

당신은 StandardInput 스트림을 닫아야합니다.

+0

감사. 이제는 완벽하게 작동합니다. –

관련 문제