2013-06-27 202 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

相關問題