Целевая платформа x86 и любой процессор - PullRequest
0 голосов
/ 21 февраля 2012

У меня небольшая проблема с простым кодом.Этот код работает правильно в режиме «x86», но не в режиме «Любой процессор», может быть, можно запустить один класс в режиме «x86» и другой класс в режиме «Любой процессор»?Код:

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

Ответы [ 3 ]

7 голосов
/ 21 февраля 2012

Это из-за перенаправления реестра .

Структура реестра отличается для 32-битной и 64-битной ОС.

Предполагается, что приложение работает на 64-разрядной версии.На компиляции для цели x86 ваша программа запускается в режиме WOW64 (32-битный процесс на 64-битном), а вы читаете ключи под Wow6432Node.См. Странное поведение при чтении реестра в C #

1 голос
/ 21 февраля 2012

При работе в 32-битном ключе реестра перенаправляется. Когда вы используете 64-битную версию, она не будет перенаправлена, и, следовательно, не будет попадать по ключу, на который больше не перенаправляется запись реестра Adobe.

Так что я бы создал Find32BitRegEntry(string path) функцию, которая ничего не делает на 32-битной, и добавляет перенаправление на x64.

0 голосов
/ 21 февраля 2012

Ключи реестра могут находиться в другом месте на 64-битных компьютерах - см. this .(Обратите внимание, что RegistryKey в вашем примере кода поступает от Microsoft.Win32?)

Я думаю, что вам нужно использовать редиректор реестра, здесь есть некоторые разговоры об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...