У меня есть проект С# unit test, который компилируется для AnyCPU. Наш сервер сборки - это 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?