如何查找正在运行的进程的已安装软件名称和版本

本文关键字:安装 进程 软件 版本 运行 何查找 查找 | 更新日期: 2023-09-27 17:57:50

我已经基于此代码导出了当前运行进程的列表

static void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
{
    uint pid;
    GetWindowThreadProcessId(hwnd, out pid);
    foreach (Process p in Process.GetProcesses())
    {
        if (p.Id == pid)
            new TrayLog().Log(
                System.Security.Principal.WindowsIdentity.GetCurrent().Name + "^" + p.Id + "^" + p.ProcessName + "^" + System.DateTime.Now.ToString("yyyyMMddHHmmss")
            );
    }
}

当前安装的软件列表是基于以下代码导出的RegistryKey密钥;

// search in: CurrentUser
key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall");
foreach (String keyName in key.GetSubKeyNames())
{
    RegistryKey subkey = key.OpenSubKey(keyName);
    try
    {
        if (!subkey.GetValue("DisplayName").Equals(null))
        {
            DataRow rows = dts.NewRow();
            rows["Machine_UUID"] = Machine_UUID;
            rows["Display_Name"] = subkey.GetValue("DisplayName").ToString();
            rows["Display_Version"] = subkey.GetValue("DisplayVersion").ToString();
            rows["Internal_Version"] = subkey.GetValue("Version").ToString();
            rows["Installation_Date"] = DateTime.ParseExact(subkey.GetValue("InstallDate").ToString(), "yyyyMMdd", null);
            rows["strInstallation_Date"] = ((DateTime)rows["Installation_Date"]).ToString("yyyyMMdd");
            rows["Installation_Location"] = subkey.GetValue("InstallLocation").ToString();
            rows["Installation_Source"] = subkey.GetValue("InstallSource").ToString();
            rows["Uninstall_String"] = subkey.GetValue("UninstallString").ToString();
            rows["Estimated_Size"] = subkey.GetValue("EstimatedSize").ToString();
            dts.Rows.Add(rows);
        }
    }
    catch (Exception e) { }
}

我需要匹配这两个列表,这样我需要获得软件名称和运行过程的其他详细信息。。。

如何查找正在运行的进程的已安装软件名称和版本

您可以获取Process.MainModule.FileName,然后使用FileVersionInfo.FileDescription来获取显示名称。

然后使用此密钥,它是当前安装的所有程序及其卸载信息的列表。

HKEY_LOCAL_MACHINE'SOFTWARE'WOW6432Node'Microsoft'Windows'CurrentVersion'Uninstall

现在从键中获取显示名称,并将它们与进程显示名称进行比较。