ich die Liste der laufenden Verfahren auf diesem CodeWie die installierte Software Name und die Version für den Betrieb finden verarbeitet
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")
);
}
}
Und die Liste der aktuell installierten Software auf Basis abgeleitet sind, werden auf den folgenden Code abgeleitet basierend RegistryKey-Schlüssel;
// 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) { }
}
Ich brauche diese beiden Liste übereinstimmen, so dass ich die Software Namen und andere Details des laufenden Prozesses bekommen ...
Nicht alle laufenden Prozesse verfügen über entsprechende Deinstallationseinträge. –