C# - 进程没有终止

时间:2010-01-10 22:54:01

标签: c# process

我正在MySql中恢复备份。但是mysql exe并没有终止。 这是我的代码 -

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;
        }
    }

我的BackUp方法运行良好,但这种方法不起作用。(它们的变化很相似)

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

您需要关闭StandardInput流:

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

否则,程序将不会终止,因为它会期待更多的输入。

答案 1 :(得分:0)

代码在哪里?作为一个猜测,我会想象输入流(fileStream)没有EOF(它可能是来自另一个进程的传入管道?还是网络流?)因此您正在等待{{1在当前数据的末尾。尝试关闭传入的流吗?

(它可能是称为 Read,但我并没有假设它实际上是一个文件/ fileStream ...我被咬了之前的假设;-p)

您也可能需要考虑适当地引入FileStream(或许using)。