Как получить путь к установленному файлу из реестра

Я хотел бы получить путь к установленному программному обеспечению из реестра, я пробовал разные методы, например это и это тоже, но я столкнулся та же ошибка:

В экземпляре объекта не задана ссылка на объект.

Я заметил, что Registry.LocalMachine.OpenSubKey(registry_key) возвращает null, поэтому я искал решение этой проблемы и нашел много, но они не смогли решить мою проблему. Я хочу продолжить со следующим кодом:

string txt_filePath = "";

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HKEY_LOCAL_MACHINE\SOFTWARE\Bentley\AutoPIPE\V8i SELECTSeries 6 Ribbon Preview and Reporting");
object objRegisteredValue = key.GetValue("ApplicationPath");

txt_filePath = objRegisteredValue.ToString();

Любая помощь будет принята с благодарностью.


person Itban Saeed    schedule 31.07.2015    source источник
comment
Сказать очевидное, но проверяли ли вы реестр, чтобы увидеть, действительно ли существует ключ?   -  person gideon    schedule 31.07.2015
comment
так что с существующим кодом вы всегда получаете ключ как нулевой? Если да, проверьте реестр.   -  person Joseph    schedule 31.07.2015
comment
@ Джозеф да, я всегда получаю ключ ноль   -  person Itban Saeed    schedule 31.07.2015
comment
@gideon Я проверил реестр.   -  person Itban Saeed    schedule 31.07.2015
comment
@ Itban означает, что в реестре не будет записи, соответствующей вашему запросу. Пожалуйста, обратитесь по этой ссылке, это может вам помочь stackoverflow.com/questions/1268715/   -  person Joseph    schedule 31.07.2015
comment
так что этот код должен работать нормально?   -  person Itban Saeed    schedule 31.07.2015
comment
Ссылку @ItbanSaeed Джозефа следует прочитать. Возможно, у вас нет разрешений. Вы запускаете приложение под администратором? Или, может быть, тогда вам нужно попросить о возвышении.   -  person gideon    schedule 31.07.2015
comment
@gideon Я запускаю приложение под администратором. Ссылка Джозефа выглядит полезной :)   -  person Itban Saeed    schedule 31.07.2015


Ответы (1)


Может проблема из-за x64-битной машины? Попробуй это:

    var regView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;
    var registry = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, regView);

    var keyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bentley\AutoPIPE\V8i SELECTSeries 6 Ribbon Preview and Reporting\RibbonUI.xml";
    var key = registry.OpenSubKey(keyPath);
person Artem Kulikov    schedule 31.07.2015
comment
Большое спасибо за ответ, но я работаю над VS2008 с .NET версии 3.5, этот код здесь не поддерживается. - person Itban Saeed; 31.07.2015
comment
Вы можете найти альтернативный способ для версии 3.5 здесь: stackoverflow.com/questions/26217199/ - person Artem Kulikov; 31.07.2015