2010-10-12 15 views
8

Chciałbym wiedzieć, gdzie znajduje się ścieżka instalacji dla aplikacji. Wiem, że zwykle jest w ... \ Program Files ... ale myślę, że niektórzy ludzie instalują go w różnych lokalizacjach. Znam nazwę aplikacji.Jak programowo można uzyskać ścieżkę instalacji innej aplikacji?

Dziękuję.

+0

możliwe duplikat [Ustal 3rd Party Zastosowanie Montaż katalog] (http://stackoverflow.com/questions/1309142/determine-3rd-party-application-installation-directory) –

Odpowiedz

12

Idealnym sposobem znalezienia ścieżki instalacji programu (w systemie Windows) jest odczytanie jej z rejestru. Większość instalatorów utworzy klucz rejestru dla tego programu, który zawiera ścieżkę instalacji. Dokładnie to, gdzie ten klucz jest i jak się go nazwie, zmienia się w zależności od programu.

Aby sprawdzić, czy program ma klucz w rejestrze, otwórz "regedit" i użyj opcji Edytuj> Znajdź, aby spróbować znaleźć klucz z nazwą programu. Jeśli taki klucz istnieje, możesz go odczytać przy użyciu klasy RegistryKey w bibliotece .NET Framework.

Jeśli program nie ma klucza rejestru, to inną opcją jest po prostu poprosić użytkownika o zlokalizowanie pliku .exe za pomocą OpenFileDialog, chociaż oczywiście nie jest to idealne rozwiązanie.

10

Wiele (większość?) Programów tworzy klucz rejestru App Paths. Wystarczy popatrzeć na

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 
4

Jeśli znasz aplikację w pytaniu (w porównaniu z dowolnej aplikacji) klucz rejestru jest prawdopodobnie najlepszym rozwiązaniem (jeśli taki istnieje).

Instalator może umieścić w swoim zwyczajem „zainstalować ścieżkę klucza” gdzieś (tak zrobić znajdowania jak wspomniano Fara) lub może to być w sekcji dezinstalacji zainstalowanych programów, więc można sprawdzić:

  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall

Ale należy pamiętać, że każda nowa wersja instalacyjnego mogłaby zmienić klucz zapisuje się zarówno za pomocą klucza niestandardowego lub do wejścia odinstalowywania. Dlatego sprawdzanie rejestru powinno być zapewne tylko dla znanej wersji install \.

tep

0

Można użyć MSI (pisałem C# wrapper dla niego tutaj https://github.com/alialavia/MSINet). Oto prosty przykład:

var location = ""; 
foreach (var p in InstalledProduct.Enumerate()) 
{ 
    try 
    { 
     if (p.InstalledProductName.Contains("AppName"))      
     { 
      location = p.InstallLocation; 
      break; 
     } 
    } 
    catch { } 
} 
Powiązane problemy