如何从c#中运行的进程获取在应用程序中打开的文件的路径

本文关键字:应用程序 路径 文件 进程 运行 获取 | 更新日期: 2023-09-27 18:24:15

我需要通过使用进程获取在应用程序中打开的文件的完整路径。

例如,我在记事本中从C:'Users'Admin'Documents'sample.txt打开了一个txt文件。而我有两个记事本正在桌面上打开。如果我使用Process.GetProcessesByName("notepad");,我可以获得记事本的所有运行实例,我甚至可以使用Mainmodule.Filename获得运行进程的完整路径

但我的要求是我需要从进程中获取文件的路径(即sample.txt。有可能吗?

因此,我尝试过:

Process[] localByName = Process.GetProcessesByName("EA");
string path = localByName[0].Modules[0].FileName;
foreach (Process process in localByName)
{
}

如何从c#中运行的进程获取在应用程序中打开的文件的路径

这完全取决于打开文本文件的应用程序是否拥有打开文件的句柄。例如,Notepad.exe打开文本文件,复制其内容并释放句柄。窗口的标题栏提供的信息并不多。

相反,如果文件是由winword.exe打开的,则应用程序将持有文本文件的句柄。在这种情况下,您可以从命令行(或通过Process.Start())使用MarkRussinovich的handle.exe,如下所示:

handle.exe test.txt

这将为您提供有关应用程序可以解析和使用的text.txt完整路径的信息。