如何查找现在正在执行的Word或Excel文件的文件路径(示例文件 - Microsoft Word).C#



i创建一个应用程序,该应用程序在计算机上记录用户的活动历史记录。目前,我需要找出例如单词中打开的文件的路径(例如с:documentsFileName.docx)。我只知道EXE文件的路径。我有进程ID,但是在ManagementObject中,我没有找到有关可执行文件路径的任何信息。我怎样才能做到这一点?下面的方法我如何通过进程ID进行.exe文件路径。

public static string GetMainModuleFilepath(int processId)
        {
            string wmiQueryString = "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId;
            using (var searcher = new ManagementObjectSearcher(wmiQueryString))
            {
                using (var results = searcher.Get())
                {
                    ManagementObject mo = results.Cast<ManagementObject>().FirstOrDefault();
                    return (string)mo?["ExecutablePath"];
                }
            }            
        }

我尝试了很多,以下是最适合我的示例代码。

无论是32位还是64位应用程序。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
namespace WmiTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int processID = 12624;   // Change for the process you would like to use
            Process process = Process.GetProcessById(processID);
            string path = ProcessExecutablePath(process);
        }
        static private string ProcessExecutablePath(Process process)
        {
            try
            {
                return process.MainModule.FileName;
            }
            catch
            {
                string query = "SELECT ExecutablePath, ProcessID FROM Win32_Process";
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
                foreach (ManagementObject item in searcher.Get())
                {
                    object id = item["ProcessID"];
                    object path = item["ExecutablePath"];
                    if (path != null && id.ToString() == process.Id.ToString())
                    {
                        return path.ToString();
                    }
                }
            }
            return "";
        }
    }
}

请注意,您必须参考系统。管理程序集并使用系统。管理名称空间

原始来源:https://stackoverflow.com/a/14668097/3850405

最新更新