Сначала вы должны удивляться, если машина, на которой программа бежится является x86 или x64:
/// <summary>
/// Determines if the current application is 32 or 64-bit.
/// se retorno == 32 = x86 else x64
/// </summary>
public int Bits()
{
return IntPtr.Size * 8;
}
После этого установите путь реестра. Роль, которая была сделана для моего приложения, я использовал переменную is64 как int. Если переменной присваивается значение 32 система x86, x64 иначе
/// <summary>
/// Construtor da classe
/// a variavel is64 vai receber um numero inteiro (32 ou 64) representando a arquitetura da maquina
/// </summary>
/// <param name="is64"></param>
public Odbc(int is64)
{
if (is64 == 32)
{
this.ODBC_INI_REG_PATH = "Software\\ODBC\\ODBC.INI\\";
this.ODBCINST_INI_REG_PATH = "Software\\ODBC\\ODBCINST.INI\\";
}
else
{
this.ODBC_INI_REG_PATH = "Software\\Wow6432Node\\ODBC\\ODBC.INI\\";
this.ODBCINST_INI_REG_PATH = "Software\\Wow6432Node\\ODBC\\ODBCINST.INI\\";
}
}
Наконец я изменил функцию вы кладете на тему. Модификация была:
Registry.LocalMachine.CreateSubKey => Registry.LocalMachine.OpenSubKey
public bool DSNExists(string dsnName)
{
try
{
var sourcesKey = Registry.LocalMachine.OpenSubKey(this.ODBC_INI_REG_PATH + "ODBC Data Sources");
if (sourcesKey == null)
{
throw new Exception("ODBC Registry key for sources does not exist");
}
string[] blah = sourcesKey.GetValueNames();
Console.WriteLine("length: " + blah.Length); //prints: 0
return sourcesKey.GetValue(dsnName) != null;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
Попробуйте запустить [Process Monitor] (http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx), пока вы это делаете, чтобы увидеть, где именно он находится в реестре. – Rup
Возможно, вы смотрите на неправильный реестр? 32-битная версия с 64-битной регистрацией приводила меня в бешенство, когда я получал права на свою систему DSN. Я думаю, что «Registry.LocalMachine» идет, если вы компилируете как x86 и x64. – Mike
@Mike Это могло быть возможно. Я получал 32-разрядные и 64-разрядные несоответствия. У меня 64-битная машина Windows 7, как мне получить доступ к 64-битовому реестру? – Ben