Process.Start启动进程但返回null

时间:2017-04-20 14:38:33

标签: c#

我有一个Windows窗体应用程序可以做一件事:启动Edge,杀死进程:

onSensorChanged

我没有使用Win10 + Edge的计算机来调试此代码,但我可以间接访问Windows 10 VM。我构建我的应用程序并在该VM上运行exe,Edge启动但随后抛出异常:

  

对象引用未设置为对象的实例。

     

在EdgeLauncher.Form1.Form1_Load(对象发件人,EventArgs e)

我理解private void Form1_Load(object sender, EventArgs e) { try { Process edgeProc = new Process(); edgeProc = Process.Start("microsoft-edge:.exe"); edgeProc.Kill(); } catch (Exception ex) { MessageBox.Show(ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace); } } 是什么,并且非常熟悉this question

MSDN说:

  

与流程资源关联的新流程,如果未启动流程资源,则为null。

正在启动Edge,因此NullReferenceException不应该是edgeProcess。那我为什么会收到这个错误?

2 个答案:

答案 0 :(得分:2)

您正在使用shell来执行该命令。无法保证与此相关的流程。仅仅因为出现一个新窗口并不意味着已经开始新的进程:)

如果你总是想要开始一个新的过程,不要使用UseShellExecute - 不用说,这有其自身的复杂性。

答案 1 :(得分:-2)

new Process()在此用例中无用。你可以这样做:

private void Form1_Load(object sender, EventArgs e)
{
    try
    {
        Process edgeProc = Process.Start("microsoft-edge:.exe");
        edgeProc?.Kill(); // the "?." will prevent the NullReferenceException 
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message + Environment.NewLine +    Environment.NewLine + ex.StackTrace);
    }
}

如果没有启动任何流程,则Process.Start(...)会返回null