[英]How to dispose a System.Diagnostics.Process object without killing process?
我有一个创建Process对象以启动外部应用程序的应用程序。 一旦它验证了应用程序已正确启动,就不再在乎它了,因此不再需要Process对象,但是由于不想关闭进程,所以无法对其调用Dispose()。 解决方法是什么?
您可以安全地处置流程实例,流程将在之后运行。
class Program
{
static void Main(string[] args)
{
Process p = new Process
{
StartInfo = {FileName = "notepad.exe"}
};
p.Start();
p.Dispose();
// Notepad still runs...
GC.Collect(); // Just for the diagnostics....
// Notepad still runs...
Console.ReadKey();
}
}
实际上,该过程(Notepad.exe)甚至会在您的.NET应用终止后运行。 顺便说一句,这是我建议不要担心Process实例并在实际终止之前将其处置的原因之一:您将失去控制手柄以停止OS进程或查询其状态。 除非您有无数的Process实例,否则我不必担心它们。
我认为Process.Close()
和Process.Dispose()
不会杀死进程。 他们只是释放一些与处理过程有关的资源。
从参考来源 :
protected override void Dispose(bool disposing) {
if( !disposed) {
if (disposing) {
//Dispose managed and unmanaged resources
Close();
}
this.disposed = true;
base.Dispose(disposing);
}
}
和
public void Close() {
if (Associated) {
if (haveProcessHandle) {
StopWatchingForExit();
Debug.WriteLineIf(processTracing.TraceVerbose, "Process - CloseHandle(process) in Close()");
m_processHandle.Close();
m_processHandle = null;
haveProcessHandle = false;
}
haveProcessId = false;
isRemoteMachine = false;
machineName = ".";
raisedOnExited = false;
//Don't call close on the Readers and writers
//since they might be referenced by somebody else while the
//process is still alive but this method called.
standardOutput = null;
standardInput = null;
standardError = null;
output = null;
error = null;
Refresh();
}
}
我看不到任何可以终止该过程的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.