在单元测试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中看到。
如果我检查这些键:LuTransactions, XaTransactions,它返回正确,即使在单元测试项目。
如果我检查这些:NetworkDtcAccessInbound, NetworkDtcAccessOutbound, NetworkDtcAccess它返回错误的只是在单元测试项目
有人知道这种行为吗?
正如@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();
}