2012-08-17 10 views
5

Tworzę narzędzie WPF, które musi uzyskać dostęp do rejestru komputera lokalnego, aby następnie znaleźć ścieżkę instalacji programu.Pobieranie ścieżki instalacji pliku z rejestru

Nawigowałem do klucza przez Regedit i daje nazwę, typ i dane, w danych pokazuje ścieżkę instalacji, chciałbym wyodrębnić ścieżkę instalacji.

wiem, że trzeba, aby przejść do tego klucza w rejestrze:

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

potem mieć dostęp do folderu w obrębie tego klucza z informacje dotyczące ścieżki instalacji.

-

+0

Żałuję tylko do odczytu klucza, aby następnie wyodrębnić konkretną ścieżkę instalacji programu. – LouisColeman

+0

Po otrzymaniu odpowiedzi, opublikuj ją jako jedną zamiast edytowania oryginalnego pytania. =) –

+0

w większości przypadków odradza się uzyskiwanie dostępu do rejestru, większość potrzebnych informacji znajduje się w klasach Application & Environment, https://msdn.microsoft.com/en-us/library/system.windows.application(v = vs.110) .aspx https://msdn.microsoft.com/en-us/library/system.environment(v=vs.110).aspx lub przy użyciu pliku konfiguracyjnego – MikeT

Odpowiedz

10

Rozwiązałem mój problem, dla każdego, kto chce rozwiązania w przyszłości, jeśli nadal utkniesz po tym, proszę o wiadomość, znalazłem, że ciężko było znaleźć zasoby.

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App Paths\myexe.exe"); 
string regFilePath = null; 

object objRegisteredValue = key.GetValue(""); 

registeredFilePath = value.ToString(); 
+3

Dziękujemy za przydatną odpowiedź. "klucz" powinien zostać usunięty, aby zwolnić uchwyt systemu związany z otwartym kluczem rejestru. Możesz zawrzeć użycie 'klucza' w instrukcji 'using'. – Ron

0

To pytanie było dla mnie bardzo pomocne. Wymyśliłem klasę pomocników, chcących grać z nowymi Tuplesami.

Przykład użycia:

public string SkypeExePath => InstalledApplicationPaths.GetInstalledApplicationPath("lync.exe"); 

Klasa:

public static class InstalledApplicationPaths 
{ 

    public static string GetInstalledApplicationPath(string shortName) 
    { 
     var path = GetInstalledApplicationPaths().SingleOrDefault(x => x?.ExectuableName.ToLower() == shortName.ToLower())?.Path; 
     return path; 
    } 

    public static IEnumerable<(string ExectuableName, string Path)?> GetInstalledApplicationPaths() 
    { 
     using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App Paths")) 
     { 
     foreach (var subkeyName in key.GetSubKeyNames()) 
     { 
      using (RegistryKey subkey = key.OpenSubKey(subkeyName)) 
      { 
       yield return (subkeyName, subkey.GetValue("")?.ToString()); 
      } 
     } 
     } 
    } 

} 
Powiązane problemy