Methode 1
Die Registrierungsschlüssel SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall stellt eine Liste von wo meisten Anwendungen installiert sind:
Hinweis: Es spielt keine‘ t listet alle EXE-Anwendungen auf dem PC auf, da einige nicht installiert werden müssen.
In Ihrem Fall bin ich ziemlich sicher, dass CMG STARS aufgeführt werden, und Sie werden danach suchen können, indem alle Unterschlüssel am Display Wert suchen iterieren und Abrufen des INSTALL.
Beachten Sie auch, dass diese Uninstall Registrierungsschlüssel in 3 Plätze in der Registrierung vorhanden:
1. SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall innerhalb Current
2. SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall innerhalb Localmachine
3. SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ Currentversion \ Uninstall in Localmachine
Dies ist eine Klasse, die den Installationsort einer Anwendung zurückgibt:
using Microsoft.Win32;
public static class InstalledApplications
{
public static string GetApplictionInstallPath(string nameOfAppToFind)
{
string installedPath;
string keyName;
// search in: CurrentUser
keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
installedPath = ExistsInSubKey(Registry.CurrentUser, keyName, "DisplayName", nameOfAppToFind);
if (!string.IsNullOrEmpty(installedPath))
{
return installedPath;
}
// search in: LocalMachine_32
keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
installedPath = ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", nameOfAppToFind);
if (!string.IsNullOrEmpty(installedPath))
{
return installedPath;
}
// search in: LocalMachine_64
keyName = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
installedPath = ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", nameOfAppToFind);
if (!string.IsNullOrEmpty(installedPath))
{
return installedPath;
}
return string.Empty;
}
private static string ExistsInSubKey(RegistryKey root, string subKeyName, string attributeName, string nameOfAppToFind)
{
RegistryKey subkey;
string displayName;
using (RegistryKey key = root.OpenSubKey(subKeyName))
{
if (key != null)
{
foreach (string kn in key.GetSubKeyNames())
{
using (subkey = key.OpenSubKey(kn))
{
displayName = subkey.GetValue(attributeName) as string;
if (nameOfAppToFind.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
{
return subkey.GetValue("InstallLocation") as string;
}
}
}
}
}
return string.Empty;
}
}
REF: Ich habe den obigen Code von here geändert, um den Installationspfad zurückzugeben.
Methode 2
Sie auch die System-Management-Net DLL verwenden können die INSTALL zu bekommen, obwohl es Haufen langsamer ist und erstellt Ereignisprotokollmeldungen für jedes installierte Produkt „Windows Installer die Produkt neu konfiguriert“ auf deinem System.
using System.Management;
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
foreach (ManagementObject mo in mos.Get())
{
Debug.Print(mo["Name"].ToString() + "," + mo["InstallLocation"].ToString() + Environment.NewLine);
}
den Namen der EXE Erste
Keines der oben genannten Methoden sagen Sie den Namen der ausführbaren Datei, aber es ist ganz einfach durch Iterieren über alle Dateien im Installationspfad zu erarbeiten und unter Verwendung eine Technik ich diskutiere here to look at file properties die EXE-Datei mit der richtigen Datei Beschreibung, zum Beispiel zu erkennen:
private string GetFileExeNameByFileDescription(string fileDescriptionToFind, string installPath)
{
string exeName = string.Empty;
foreach (string filePath in Directory.GetFiles(installPath, "*.exe"))
{
string fileDescription = GetSpecificFileProperties(filePath, 34).Replace(Environment.NewLine, string.Empty);
if (fileDescription == fileDescriptionToFind)
{
exeName = GetSpecificFileProperties(filePath, 0).Replace(Environment.NewLine, string.Empty);
break;
}
}
return exeName;
}
Beide Verfahren (1 oder 2) Sie verwenden empfehle ich, dass Sie den Speicherort exe Namen speichern, so dass Sie nur einmal diese Operation tun. Meiner Meinung nach ist es besser, Methode 1 als schneller zu verwenden und erstellt nicht alle "Windows Installer konfiguriert das Produkt neu." Ereignisprotokolle.
Alternative Methode einen Installer mit
Wenn Ihre Anwendung Ihnen, wo CMG STARS Using Windows Installer to Inventory Products and Patches während der Installation befindet sich herausfinden konnte installiert wird:
Aufzählen Produkte
Verwenden Sie die MsiEnumProductsEx Funktion zum Aufzählen von Windows Installer-Anwendungen, die im System installiert sind. Diese Funktion kann alle pro Rechner installierten Installationen und Benutzerinstallationen von Anwendungen (verwaltet und nicht verwaltet) für den aktuellen Benutzer und andere Benutzer im System finden. Verwenden Sie den Parameter dwContext , um den Installationskontext anzugeben, der gefunden werden soll. Sie können eine beliebige oder eine beliebige Kombination der möglichen Installation Kontexte angeben. Verwenden Sie den Parameter szUserSid, um den Benutzerkontext der zu suchenden Anwendungen anzugeben.
Während der Installation finden Sie den Exe-Pfad zu CMG STARS und speichern Sie einen Registrierungsschlüssel mit dem Wert.
Ich diskutiere mit diesem Ansatz von saving an EXE's install path in the registry for updating applications here.
Tip
Wie in den Kommentaren erwähnt, lohnt es sich, Sie für die EXE-Namen st201110.exe und sehen, ob die Autoren der CMG STAR Anwendung bereits diese in der Registrierung eine Suche zur Verfügung stellen Informationen in einem Registrierungsschlüssel können Sie direkt zugreifen.
Plan B
Wenn alles andere fehlschlägt den Benutzer mit einem FileOpenDialog präsentieren und erhalten sie manuell die EXE-Pfad angeben.
Was passiert, wenn die Drittanbieteranwendung deinstalliert oder aktualisiert wird?
erwähnte ich den Pfad installieren und in der Registry exe Namen zu speichern (oder Datenbank-Konfigurationsdatei, usw.), und Sie sollten die exe-Datei existiert immer überprüfen, bevor Sie alle externen Anrufe, um es zu machen, zum Beispiel:
if (!File.Exists(installPath + exeName))
{
//Run through the process to establish where the 3rd party application is installed
}
Es sollte einen Weg geben, um diese Informationen aus der Registrierung zu bekommen, aber ich bin mir nicht sicher, wie genau Sie sie bekommen. –
können Sie auch einen ['uigetfile'] (http://www.mathworks.com/help/matlab/ref/uigetfile.html) Dialog (oder den entsprechenden Eintrag in C#) anzeigen, um den Benutzer aufzufordern, den" CMG "auszuwählen ausführbar selbst. – Amro
wie für die Registrierung Idee, das ist anwendungsspezifisch, aber Sie könnten diese Frage auschecken: http://Stackoverflow.com/q/429738/97160 – Amro