Metoda 1
klucze rejestru SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall zawiera listę gdzie są zainstalowane najbardziej wniosków:
Uwaga: To nie robi” t wypisz wszystkie aplikacje EXE na PC, ponieważ niektóre nie wymagają instalacji.
W twoim przypadku jestem całkiem pewny, że CMG STARS zostaną wymienione i będzie można go wyszukać przez Iterowanie nad wszystkie podklucze patrząc na DisplayName wartości i pobierania InstallLocation.
Należy również pamiętać, że ten klucz rejestru Uninstall istnieje w 3 miejscach w rejestrze:
1. SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall wewnątrz CurrentUser
2. SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall wewnątrz LocalMachine
3. SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall w LocalMachine
Tutaj jest klasa, która zwraca zainstalowany lokalizację aplikacji:
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: Zmodyfikowałem powyższy kod z here, aby zwrócić ścieżkę instalacji.
Metoda 2
Można również użyć zarządzania systemem .NET DLL uzyskać InstallLocation chociaż jest mnóstwo wolniej i tworzy „Instalator Windows rekonfigurowane produkt” Komunikaty dziennika zdarzeń dla każdego zainstalowanego produktu w twoim systemie.
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);
}
Uzyskiwanie nazwa EXE za
Żadna z powyższych metod powiedzieć nazwę pliku wykonywalnego, jednak jest to dość łatwe do pracy przez iteracji po wszystkich plików w katalogu instalacyjnym i stosując technikę omówię here to look at file properties wykryć EXE z odpowiednim Opis pliku, np:
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;
}
metoda Albo (1 lub 2) korzystania I zaleca, aby zapisać lokalizację exe nazwy więc tylko zrobić tę operację raz. Moim zdaniem lepiej użyć metody 1, ponieważ jest ona szybsza i nie tworzy wszystkich "Instalator Windows ponownie skonfigurował produkt". dzienniki zdarzeń.
Alternatywna metoda z użyciem instalatora
Jeśli aplikacja jest instalowana można dowiedzieć się, gdzie CMG STARS znajduje się w trakcie instalacji Using Windows Installer to Inventory Products and Patches:
wyliczanie Produkty
Skorzystaj z MsiEnumProductsEx funkcja do wyliczenia aplikacji Instalatora Windows zainstalowanych w systemie . Ta funkcja może znaleźć wszystkie instalacje na komputerze i instalacje aplikacji (zarządzanej i niezarządzanej) dla poszczególnych użytkowników dla dla każdego użytkownika i innych użytkowników w systemie. Użyj parametru dwContext , aby określić kontekst instalacji, który ma zostać znaleziony. Można podać określić dowolną lub dowolną kombinację możliwych kontekstów instalacji. Parametr szUserSid służy do określania kontekstu użytkownika aplikacji, które można znaleźć.
Podczas instalacji można znaleźć ścieżkę exe do CMG STARS i zapisać klucz rejestru z wartością.
Omawiam stosowanie tego podejścia z saving an EXE's install path in the registry for updating applications here.
Tip
Jak wspomniano w komentarzach, to warto to zrobić wyszukiwania w rejestrze dla nazwy exe st201110.exe i sprawdzić, czy autorzy aplikacji CMG STAR to już zapewnić informacje w kluczu rejestru, do którego można uzyskać bezpośredni dostęp.
Plan B
Jeśli wszystko inne zawiedzie zaprezentować użytkownikowi FileOpenDialog i je ręcznie określić ścieżkę exe.
Co się stanie, jeśli aplikacja innego producenta zostanie odinstalowana lub zaktualizowana?
wspominałem przechowywać ścieżkę i exe nazwę w rejestrze (lub bazę danych, plik konfiguracyjny, etc) zainstalować i zawsze należy sprawdzić plik exe istnieje przed dokonaniem jakichkolwiek połączeń zewnętrznych do niego, np:
if (!File.Exists(installPath + exeName))
{
//Run through the process to establish where the 3rd party application is installed
}
Powinien istnieć sposób na uzyskanie tych informacji z rejestru, ale nie jestem pewien, jak je zdobyć. –
można również wyświetlić okno dialogowe ['uigetfile'] (http://www.mathworks.com/help/matlab/ref/uigetfile.html) (lub jego odpowiednik w języku C#), aby zachęcić użytkownika do wybrania" CMG " wykonywać się samodzielnie. – Amro
co do koncepcji rejestru, jest to specyficzne dla aplikacji, ale można sprawdzić to pytanie: http://stackoverflow.com/q/429738/97160 – Amro