我有一个为 AnyCPU 编译的 c# 单元测试项目。我们的构建服务器是 64 位机器,并安装了 64 位 SQL Express 实例。
测试项目使用类似于以下的代码来标识 .MDF 文件的路径:
private string GetExpressPath()
{
RegistryKey sqlServerKey = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" );
string sqlExpressKeyName = (string) sqlServerKey.GetValue( "SQLEXPRESS" );
RegistryKey sqlInstanceSetupKey = sqlServerKey.OpenSubKey( sqlExpressKeyName + @"\Setup" );
return sqlInstanceSetupKey.GetValue( "SQLDataRoot" ).ToString();
}
这段代码在我们的 32 位工作站上运行良好,并且在构建服务器上运行正常,直到我最近启用了 NCover 的代码覆盖率分析。由于 NCover 使用 32 位 COM 组件,因此测试运行程序 (Gallio) 作为 32 位进程运行。检查注册表,下面没有“Instance Names”项
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
有没有办法让以 32 位模式运行的应用程序访问 Wow6432Node 之外的注册表?
最佳答案
创建/打开注册表项时,您必须使用 KEY_WOW64_64KEY 参数。但是 AFAIK 在 Registry 类中是不可能的,而只有在直接使用 API 时才可能。
This可能有助于您入门。
关于c# - 从 32 位应用程序读取 64 位注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974038/