我的简单代码有点小问题。此代码在“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;
}
}
}
答案 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)