我从我的c#代码运行7-zip
:
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = zipFileExePath,
Arguments = "x \"" + zipPath + "\" -o\"" + extractPath + "\""
};
using (Process process = Process.Start(processStartInfo))
{
if (process.WaitForExit(timeout))
{
}
else
{
s_logger.ErrorFormat("Timeout whilte extracting extracting {0}", zipPath);
}
process.Close();
}
现在我看到的情况是,当超时到达时,7-zip
中仍存在Task Manager
进程。为什么会这样?我把它们都关闭并处理
答案 0 :(得分:1)
您的问题提到了Process类的三种方法:
这些方法都不会对过程做任何事情,当然也不会杀死它。
WaitForExit是一种观察方法,它会等待并查看进程是否自行终止。超时的重载将返回bool
,告诉您方法是否观察到进程终止。如果它没有,它可能仍在运行。
Close和Dispose对正在运行的进程没有任何作用,它只是关闭Process类内部的句柄,它是该类如何保持进程标签的机制问题。
当您完成观察正在运行的过程时,关闭此句柄是个好主意。
但是,如果您希望流程终止,则必须致电Process.Kill。
答案 1 :(得分:0)
可能类似以下内容:
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = zipFileExePath,
Arguments = "x \"" + zipPath + "\" -o\"" + extractPath + "\""
};
using (Process process = Process.Start(processStartInfo))
{
if (process.WaitForExit(timeout))
{
//somecode?
}
else
{
s_logger.ErrorFormat("Timeout whilte extracting extracting {0}", zipPath);
}
process.Kill();
}