c # получить значение из реестра без параметров - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь получить путь к AcroRd32.exe, вызвав следующий код:

 public static string acrobatPath = Registry.GetValue(@"HKEY_CLASSES_ROOT\Applications\AcroRD32.exe\shell\Read\command", "", 0).ToString();

То, что я получаю, является правильным значением:

"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" "%1"

но мне нужен только путь к AcroRd32.exe без "% 1". Теперь я могу использовать команду split:

public static string acrobatPath = Registry.GetValue(@"HKEY_CLASSES_ROOT\Applications\AcroRD32.exe\shell\Read\command", "", 0).ToString();
string[] split = new string[2];
split = acrobatPath.Split('"');
// mask path with ""
acrobatPath = "\"" + split[1] + "\""; //get only path

но значение acrobatPath не может быть изменено из-за статического атрибута.

Я также не могу использовать substr (), потому что путь может отличаться, например. если в конце нет параметра ("% 1").

Как извлечь путь и установить статическую переменную за один раз?

Ответы [ 2 ]

4 голосов
/ 29 ноября 2011

Используйте статический конструктор для своего класса и выполняйте всю работу по обработке строк.

class YourClass
{
    public static string acrobatPath;
    // This static constructor will be called before first access to your type.
    static YourClass()
    {
        acrobatPath = Registry.GetValue(@"HKEY_CLASSES_ROOT\Applications\AcroRD32.exe\shell\Read\command", "", 0).ToString();
        string[] split = new string[2];
        split = acrobatPath.Split('"');
        // mask path with ""
        acrobatPath = "\"" + split[1] + "\""; //get only path
    }
}
0 голосов
/ 29 ноября 2011
but the value acrobatPath cannot be changed because of static attribute.

Это утверждение не имеет смысла.Вы можете изменить статическую переменную.То, как вы используете статическую строку для установки значения ключа регистра (которое не изменится, если оно существует), является причиной, по которой вы не можете ее изменить.

Решение состоит в том, чтобы изменить способ работы кода в качестве метода.

Поскольку вы уже приняли ответ Владимира Перевалова, я не буду вдаваться в подробности.Я хотел бы сделать следующее:

1) Получить каталог установки Adobe Reader, прочитав каталог установки.Я бы установил это в переменную, которую я мог изменить по желанию.

2) Я бы изменил строку только для получения пути

3) Я бы установил текущее значениеСтрока, которую я просто создаю для статической переменной.

Это делает именно то, что делает код Владимира Перевалова, просто использует функцию вместо класса.Конечно, метод будет статическим и в том же классе, что и статическая переменная.Конечно, нет ничего плохого в использовании конструктора STATIC, я всегда считал конструктор специализированным методом, я просто хотел отметить, что вы МОЖЕТЕ изменить статическую переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...