平台目标x86和任何CPU

时间:2012-02-21 14:37:44

标签: c# adobe x86 version anycpu

我的简单代码有点小问题。此代码在“x86”模式下正常工作,但在“任何CPU”模式下无法正常工作,也许可以在“x86”上运行一个类,在“任何CPU”模式下运行另一个类?代码:

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 个答案:

答案 0 :(得分:7)

这是因为registry redirection

对于32位和64位操作系统,注册表的结构是不同的。

假设您在64位计算机上运行应用程序,编译x86目标会使您的程序使用WOW64模式(64位上的32位进程)运行,并且您正在读取Wow6432Node下的键。见Weird behaviour when reading registry in C#

答案 1 :(得分:1)

以32位运行时,注册表项会被重定向。当你以64位运行时,它不会被重定向,因此不会点击adobe的注册表项被重定向到的键。

所以我创建了一个Find32BitRegEntry(string path)函数,它在32位上没有任何作用,并在x64上添加了重定向。

答案 2 :(得分:0)

注册表项可以位于64位计算机上的不同位置 - 请参阅this。 (请注意,示例代码中的RegistryKey来自Microsoft.Win32?)

我认为您需要使用注册表重定向器,有一些关于here的讨论。