sri durga Ответов: 1

Как проверить файл из реестра и получить путь к файлу с помощью C#


Привет,

У меня есть приложение C#, я хочу проверить инструмент, который зарегистрирован или нет в реестре. если инструмент зарегистрирован, я хочу получить путь и выполнить этот exe-файл в командной строке?

может ли кто-нибудь подсказать мне, как это сделать?

Спасибо.

Что я уже пробовал:

using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\PenMount Windows Universal Driver"))
             {
                 if (rk != null)
                 {
                     this.Logger.Error("PenMount exists");
                 }
                 else
                 {
                     this.Logger.Error("not exists");
                 }
             }


но rk всегда становится нулевым.

Richard MacCutchan

Вы заглядывали в реестр, чтобы узнать, существует ли ключ, или проверяли код ошибки, чтобы выяснить, почему?

sri durga

Я проверил другие программы. его предоставление null даже ключ существует в реестре.

Richard MacCutchan

Затем вам нужно проверить код ошибки, когда он возвращает null.

1 Ответов

Рейтинг:
12

Richard Deeming

Наиболее вероятная причина заключается в том, что вы запускаете 32-разрядное приложение на 64-разрядной ОС:
c# - OpenSubKey () возвращает null для раздела реестра, который я вижу в regedit.exe -переполнение стека[^]

По умолчанию вы будете смотреть в HKLM\Software\Wow6432Node, благодаря перенаправителю реестра:
Перенаправитель Реестра (Windows)[^]

Предполагая, что вы используете .NET 4.0 или более позднюю версию, вам нужно будет указать представление реестра:

using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWARE\PenMount Windows Universal Driver"))
{
   // key now points to the 64-bit key
}

Если вы используете более раннюю версию, вам понадобятся некоторые вызовы P/Invoke:
Как читать 64-битный реестр из 32-битного приложения или наоборот | Rhyous[^]


sri durga

вышеприведенное решение работает, но я пытаюсь получить путь, по которому оно установлено, из реестра. не могли бы вы помочь мне, как получить путь из реестра?

Спасибо за помощь.