1

こんにちは、以下のコードは機能していますが、プログラムの 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
    }
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 に答える