您好以下代码正在运行,但是如果其中一个程序已经打开,它将为GetProcessByName行抛出一个null异常。
如果流程正在运行,我该如何正确跟踪流程?
string path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SomeFolder\\Folder\\Output");
string fname = System.IO.Path.Combine(path, Title); //<--- Title property will be like text.xlsx, test.docx etc)
Process sproc = Process.Start(fname);
string pname = sproc.ProcessName;
Process info = Process.GetProcessesByName(pname).FirstOrDefault();
using (Process eProcess = info)
{
eProcess.MainWindowTitle.Contains(fname);
eProcess.WaitForExit();
//Do Other Stuff
}
答案 0 :(得分:3)
为什么不使用sproc
代替info
?
要回答这个问题,GetProcessesByName会返回流程的友好名称(即通常没有扩展名)。所以这应该有用
string fName = Path.GetFileNameWithoutExtension(pname);
Process info = Process.GetProcessesByName(fName).FirstOrDefault();
但如前所述,如果这是您的完整代码,则无需创建info
变量,因为您不必要地找到已存储在sproc
中的相同进程。