2010-06-24 14 views
20

Estamos utilizando WIX para instalar una serie de servicios que creamos. Estoy escribiendo una utilidad rápida para volcar los servicios instalados actualmente. Acabo de iterar sobre subclaves de:Registro GetSubKeyNames() enumera claves diferentes que Regedit?

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

buscan DisplayName. El problema es que solo dos de mis diez servicios aparecen en la lista.

Sin embargo, cuando miro a las subclaves en Regedit, que están allí. Además, están en los programas instalados (y puedo encontrarlos en SELECT * de Win32_Product también).

Miré a través de la documentación de MSDN, tratando de averiguar si hay algún punto de vista especial del Registro que me falta. Tal vez es un problema de privilegio? Pero estoy ejecutando la herramienta como administrador. ¿Hay algún problema de montaje de la colmena?

Para ser claros con el código, aquí está el código de prueba de aplicaciones (de this answer):

String registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey)) 
{ 
    foreach(String subkeyName in key.GetSubKeyNames()) 
    Console.WriteLine(key.OpenSubKey(subkeyName).GetValue("DisplayName")); 
} 

Alguna idea sobre esto?

+0

¿Qué es exactamente estás tratando de hacer? Además, debe etiquetar esto como "Wix". – dvallejo

+1

Además, no repita las etiquetas ("C#") en el título. Estoy seguro de que no crees que 'GetSubKeyNames' sea un método de C#, pero el título se lea de esa manera. –

Respuesta

25

El problema es un problema de 32/64 bits. Parece que algunas de las instalaciones ocurrieron bajo

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

Cuando las enumero a ambas, obtengo todas mis instalaciones.

Aparentemente también puedo usar RegistryKey.OpenBaseKey() con un RegistryView.Registry64/32 en lugar del Wow6432Node también.

Cuestiones relacionadas