我有一段代码来显示文件的属性窗口
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\Users\nyongrand\Desktop\Internet Download Manager.lnk";
psi.Verb = "properties";
Process process = Process.Start(psi);
process.WaitForExit(); //This give me exception, Object reference not set to an instance of an object.
我想要的是等到窗口属性关闭,因为如果我的代码关闭,属性窗口也将关闭,我需要一个解决方案,我的代码能够等待属性窗口关闭,或者我的代码可以在不关闭属性窗口的情况下退出。
答案 0 :(得分:1)
您获得的例外情况意味着,当您尝试调用其process
成员方法时,null
为WaitForExit
。所以你应该问的问题是为什么。
从the documentation开始,查看您正在调用的Process.Start
函数的重载,以查看它实际返回的内容。果然,它会返回一个Process
对象,但仅限于某些条件:
返回值
输入:System.Diagnostics.Process
与流程资源关联的新Process
组件,如果未启动任何流程资源,则为null
(例如,如果重用现有流程)。
并且,从“备注”部分:
注意:如果要启动的可执行文件的地址是URL,则不会启动该过程并返回
null
。
因此,如果重新使用现有流程,Process.Start
方法将返回null
。而且你不能在null
上调用方法。
答案 1 :(得分:0)
尝试替换
Process process = Process.Start(psi);
与
Process process = new Process();
if(process.Start(psi))
{
process.WaitForExit();
}
else
{
//Do something here to handle your process failing to start
}
您的代码遇到的问题是Process.Start()返回一个布尔值。它不是Process对象的工厂。