为什么我的C#流程有时会工作,有时会无限期挂起?

时间:2018-11-15 20:41:52

标签: c# process

我有一段代码在C#中运行,并创建了一个用于解压缩(解压缩和解压缩)文件的进程。重新启动计算机后,可以调用下面的代码块,并且在一两秒钟内将文件解压缩。但是,在某些时候,下面的代码会完全停止工作(直到我重新启动)。

Process bashProcess = new Process();
bashProcess.StartInfo.FileName = ConfigurationManager.AppSettings["Util.CygwinPath"];
bashProcess.StartInfo.Arguments = String.Format(
    "--login -c \"tar --overwrite --gzip --directory={0} -xf {1}\"", 
    unixPath.Replace(fileName, ""), unixPath);
bashProcess.StartInfo.RedirectStandardError = true;
bashProcess.StartInfo.RedirectStandardInput = true;
bashProcess.StartInfo.RedirectStandardOutput = true;
bashProcess.StartInfo.CreateNoWindow = true;
bashProcess.StartInfo.UseShellExecute = false;
bashProcess.StartInfo.ErrorDialog = false;

bashProcess.Start();
bashProcess.WaitForExit(10000);

我尝试了一些事情,包括:

  • 抓取StandardOutput并将其记录下来,以清除其缓冲区。 (什么都没记录)
  • 抓取StandardError并将其记录下来,以清除其缓冲区。 (什么都没记录)
  • 在以后的过程中(手动和编程地)终止该过程,以防先前的过程保留了我要解压缩的文件。
  • 如果僵尸进程将其解压缩,请删除并重新安装我要解压缩的文件。

是什么导致流程无法正常工作?它不会出错,它会无限期地挂起,直到达到WaitForExit(10000)的超时为止。

更新

我没有记录 bashProcess.StartInfo.Arguments 的最终值,但是我已经获取了该值并确保Cygwin可以运行它。从Cygwin运行时,文件将按预期方式解压缩。完整的命令如下所示:

bash.exe --login -c "tar --overwrite --gzip --directory=/cygdrive/mypath/mydir -xf /cygdrive/mypath/mydir/myfile.tar.gz"

我正在直接从Visual Studio 2015运行上面的代码。

我在计算机上注意到的另一件奇怪的事情是Cygwin的启动时间是可变的。重新启动后,立即可以在几秒钟内打开Cygwin。我的计算机运行一段时间后,Cygwin可能需要3到5分钟才能打开。我想知道Cygwin的加载时间和我在此问题中的问题是否相关?

更新2

虽然我不知道为什么Cygwin会随着时间的推移而变慢,但看来计算机的Cygwin变慢是问题的根源。我注意到 did 以上的代码最终完成了,但是比预期的要花几分钟的时间(上面的代码应该在1-2秒内完成)。

0 个答案:

没有答案