我有一段代码在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);
我尝试了一些事情,包括:
是什么导致流程无法正常工作?它不会出错,它会无限期地挂起,直到达到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秒内完成)。