在单元测试c#项目中,Key.GetValue("keyName")返回错误的值

本文关键字:quot keyName 返回 错误 项目 单元测试 GetValue Key | 更新日期: 2023-09-27 18:11:53

我有这样的代码:

RegistryKey key = Registry.LocalMachine.OpenSubKey("Software''Microsoft''MSDTC''Security");
if (key != null)
{
      Object o = key.GetValue("NetworkDtcAccessInbound");
      if (o != null)
      {
      }
}

当我在正常项目中使用时,它返回正确值(1),但在单元测试项目中它返回错误值(0),我知道因为我在regedit中看到。

如果我检查这些键:LuTransactionsXaTransactions,它返回正确,即使在单元测试项目

如果我检查这些:NetworkDtcAccessInboundNetworkDtcAccessOutboundNetworkDtcAccess它返回错误的只是在单元测试项目

有人知道这种行为吗?

在单元测试c#项目中,Key.GetValue("keyName")返回错误的值

正如@AlexeiLevenkov所说,这是x86/x64不匹配,单元测试运行为x86,但我的系统是x64,我做了一个网络搜索代码读取注册表的每个操作系统类型

下面的代码是x86操作系统的,但是我的计算机是x64,所以下面的代码返回了一个错误的值(value = 0)

string value32 = string.Empty;
RegistryKey localKey32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
localKey32 = localKey32.OpenSubKey("Software''Microsoft''MSDTC''Security");
if (localKey32 != null)
{
    value32 = localKey32.GetValue("NetworkDtcAccessInbound").ToString();
}

下面的代码是x64操作系统,我的计算机是x64,所以下面的代码返回一个正确的值(value = 1)

string value64 = string.Empty;
RegistryKey localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
localKey = localKey.OpenSubKey("Software''Microsoft''MSDTC''Security");
if (localKey != null)
{
    value64 = localKey.GetValue("NetworkDtcAccessInbound").ToString();
}