我有一个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
。那我为什么会收到这个错误?
答案 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
。