我的代码,删除了一些非必要的位,看起来像:
using (Process p = new Process()()
{
p.StartInfo.FileName = batfile;
p.StartInfo.Arguments = @"""" + filename + @"""";
p.Start();
if (!p.WaitForExit(timeout))
{
p.Kill();
if (!p.WaitForExit(timeout))
{
return failure;
}
}
}
File.Delete(filename);
return success;
因此,我创建了一个执行.bat文件的进程,向.bat文件传递一个文件名进行处理,然后启动进程,等待它终止,然后删除它刚刚处理的文件。通常情况下,这很好用。
有时候,.bat文件中的内容会挂起,我必须终止恢复过程。当发生这种情况时,File.Delete()会抛出异常"该进程无法访问文件' filename'因为它正被另一个进程使用"。
想想也许我只需要稍等一下我在File.Delete()之前放一个Thread.Sleep()几秒钟 - 我已经将睡眠时间增加到30秒并且我仍然看到了例外。当一个过程死亡后,打开的手柄当然不会徘徊很久吗?
如何修复或解决此问题?