Pregunta

Tengo un pequeño problema con el código simple. Este código funciona correctamente en el modo "x86" pero no en el modo "CPU", ¿tal vez es posible ejecutar una clase en "x86" y otra clase en el modo "CPU"? Código:

namespace Software_Info_v1._0
{
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;

public class Adobe
{
    public string GetAdobeVersion()
    {
        try
        {
            RegistryKey adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Adobe");
            if (adobe != null)
            {
                RegistryKey acroRead = adobe.OpenSubKey("Acrobat Reader");
                if (acroRead != null)
                {
                    string[] acroReadVersions = acroRead.GetSubKeyNames();
                    foreach (string versionNumber in acroReadVersions)
                    {
                        Console.WriteLine("Acrobat Reader version: " + versionNumber);
                    }
                }
            }
        }
        catch
        {
        }
        return null;
    }
}
}
¿Fue útil?

Solución

Esto se debe a redirección del registro.

La estructura del registro es diferente para el sistema operativo de 32 bits y 64 bits.

Suponiendo que está ejecutando su aplicación en una máquina de 64 bits, la compilación de Target X86 hace que su programa se ejecute usando el modo WOW64 (proceso de 32 bits en 64 bits) y está leyendo claves bajo WOW6432Node. Ver Comportamiento extraño al leer registro en C#

Otros consejos

Cuando se ejecuta como 32 bits, la clave de registro se redirige. Cuando se ejecute como 64 bits, no se redirige y, por lo tanto, no alcanzará la clave a la que la entrada del registro de Adobe se redirigió más.

Así que crearía un Find32BitRegEntry(string path) Funciona, eso no hace nada en 32 bits y agrega la redirección en x64.

Las claves de registro pueden estar en un lugar diferente en máquinas de 64 bits - ver este. (Observe que RegistrySkey en su código de muestra proviene de Microsoft.win32?)

Creo que necesitas usar un redirector de registro, se habla de eso aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top