1

您好,下面的代码正在运行,但如果其中一个程序已经打开,它将为 GetProcessByName 行抛出一个空异常。

如果进程已经在运行,我如何正确跟踪进程?

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
    }
4

1 回答 1

3

为什么不使用sproc代替info

为了回答这个问题,GetProcessesByName返回进程的友好名称(即通常没有扩展名)。所以这应该有效

string fName = Path.GetFileNameWithoutExtension(pname);
Process info = Process.GetProcessesByName(fName).FirstOrDefault();

但如前所述,如果这是您的完整代码,则无需创建info变量,因为您不必要地查找已存储在sproc.

于 2013-06-27T15:22:10.183 回答