我根据此代码
派生了当前正在运行的进程列表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) { }
}
我需要匹配这两个列表,这样我需要获取软件名称和正在运行的进程的其他详细信息......
答案 0 :(得分:0)
您可以获取Process.MainModule.FileName
,然后使用FileVersionInfo.FileDescription
获取显示名称。
然后使用此密钥,它是所有当前安装的程序的列表及其卸载信息。
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
现在从键中获取显示名称,并将它们与流程显示名称进行比较。