从32位应用程序读取64位注册表

我有一个为AnyCPU编译的ac#单元测试项目。我们的构建服务器是一台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位进程运行。

检查注册表,下面没有“实例名称”键

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Microsoft SQL

Server

以32位模式运行的应用程序是否可以访问Wow6432Node外部的注册表?

回答:

您必须在创建/打开注册表项时使用KEY_WOW64_64KEY参数。但是,只有在直接使用API​​时,Registry类才能使用AFAIK。

这可能有助于您入门。

以上是 从32位应用程序读取64位注册表 的全部内容, 来源链接: utcz.com/qa/405159.html

回到顶部