在下面的示例中,如果代码离开using语句,它仍在运行,会发生什么?
using (var p = new Process())
{
p.StartInfo.FileName = "c:\\temp\\SomeConsoleApp.exe";
p.Start();
}
答案 0 :(得分:9)
应该将系统上运行的操作系统进程与代表“句柄”的Process
对象分离到程序中:
Process
对象被释放,因此您的程序无法再与操作系统进程交互。在Dispose()
对象上调用Process
方法不会终止操作系统进程。
答案 1 :(得分:1)
您可能知道using
语句将调用Dispose
方法,因此流程实例将为Disposed。
要与流程互动,请获取所需的与流程相关的信息Handle
to the Process。 .Net框架内部保存Handle到进程并为您带来所有痛苦。处理将关闭流程Handle
,因此您将无法以良好的方式使用Process
对象。
最重要的是:你开始的过程没有任何反应,它就好像什么也没发生一样。真的什么都没发生,你刚丢失了门钥匙,并不代表房间被毁坏。
答案 2 :(得分:0)
进程将一直运行,直到您关闭它。它不会因为流程而死亡。对象范围结束。
答案 3 :(得分:0)
进程将继续运行。您可以将Process p移动到类成员并在OnStop中停止该进程,以确保如果exe变得混乱,您可以再次停止该服务。
protected override void OnStop()
{
p.Kill();
}