2012-08-17 18 views
5

Sto creando un'utilità WPF che deve accedere al registro del computer locale per trovare il percorso di installazione del programma.Recupero del percorso di installazione del file dal registro

Ho navigato alla chiave tramite Regedit e fornisce Nome, Tipo e Dati, all'interno dei Dati mostra il percorso di installazione, vorrei estrarre il percorso di installazione.

so che ho bisogno per passare a questa chiave nel Registro di sistema:

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

poi ho bisogno di accedere a una cartella all'interno di questa chiave con il informazioni riguardanti il ​​percorso di installazione.

-

+0

Vorrei solo leggere la chiave, per poi estrarre il percorso di installazione programma specifico. – LouisColeman

+0

Quando hai trovato una risposta, pubblicala come una invece che modificare la domanda originale. =) –

+0

nella maggior parte delle situazioni l'accesso al registro è sconsigliato, la maggior parte di ciò che ti serve può essere trovata nelle classi Applicazione e Ambiente, 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 o utilizzando un configfile – MikeT

risposta

10

Ho risolto il mio problema, a chiunque desideri una soluzione in futuro, se il problema persiste, mi è stato difficile trovare le risorse.

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

object objRegisteredValue = key.GetValue(""); 

registeredFilePath = value.ToString(); 
+3

Grazie per la risposta utile. 'chiave' deve essere eliminata per rilasciare l'handle di sistema associato ad un RegistryKey aperto. Si può avvolgere l'uso della 'chiave' in una istruzione 'using'. – Ron

0

Questa domanda è stata molto utile per me. Mi sono avvicinato con una classe di supporto, volendo giocare con i nuovi Tuples.

Esempio di utilizzo:

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

La classe:

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()); 
      } 
     } 
     } 
    } 

} 
Problemi correlati