2012-08-17 22 views
5

Estoy creando una utilidad WPF que necesita acceder al registro de la máquina local, para luego descubrir la ruta de instalación del programa.Recuperando la ruta de instalación del archivo desde el registro

He navegado a la clave a través de Regedit y le da un nombre, tipo y datos, dentro de los datos muestra la ruta de instalación, me gustaría extraer la ruta de instalación.

Sé que necesito para navegar hasta esta clave en el registro:

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

entonces necesito para acceder a una carpeta dentro de esta clave con el información con respecto a la ruta de instalación.

-

+0

Sólo deseo de leer la clave, a continuación, extraer la ruta de instalación del programa específico. – LouisColeman

+0

Cuando haya encontrado una respuesta, publíquela como una en lugar de editar la pregunta original. =) –

+0

En la mayoría de las situaciones, se desaconseja acceder al registro; la mayoría de lo que necesita se puede encontrar en las clases de 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 o utilizando un archivo de configuración – MikeT

Respuesta

10

Resolví mi problema, para cualquiera que quiera una solución en el futuro si todavía está atrapado después de esto, por favor envíeme un mensaje, me pareció que era difícil encontrar los recursos.

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

object objRegisteredValue = key.GetValue(""); 

registeredFilePath = value.ToString(); 
+3

Gracias por la útil respuesta. 'clave' debe eliminarse para liberar el identificador del sistema asociado con un RegistryKey abierto. Podría ajustar el uso de 'clave' en una declaración 'using'. – Ron

0

Esta pregunta fue muy útil para mí. Vine con una clase de ayudante, queriendo jugar con las nuevas Tuplas.

Ejemplo de uso:

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

La clase:

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

} 
Cuestiones relacionadas