2013-06-27 169 views
1

你好下面的代码正在工作,但是如果其中一个程序已经打开,它会为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 
    } 

回答

3

为什么不使用sproc而不是info

要回答这个问题,GetProcessesByName返回该过程的友好名称(即通常没有扩展名)。所以这应该工作

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

但是前面提到,如果这是你完整的代码,就没有必要创建一个info的变量,因为你不必要发现已经被存储在sproc相同的过程。

+0

更新了原点。问题与路径和fname,谢谢答复 – KeyboardFriendly

+1

我不认为你的更新有什么区别?只需将我的答案中的'fname'更改为另一个名称,因为您的代码中已经有'fname'。 – keyboardP

+0

明白了!再次感谢! – KeyboardFriendly

相关问题