Реестр не изменяется с помощью приложения C # - PullRequest
3 голосов
/ 18 марта 2011

Эй, ребята, у меня есть следующий фрагмент кода, который выполняется в службе Windows.

служба наблюдает за локальной сетью и соответствующим образом изменяет настройки прокси, проблема в том, что по какой-то причине настройки прокси не обновляются.

приложение работает под локальной системной учетной записью, но реестр остается неизменным:

У кого-нибудь есть идеи?

using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true))
{
    if (key != null)
    {
        key.SetValue("ProxyEnable", Convert.ToInt32(enable), RegistryValueKind.DWord);

        //I/O Flushes
        key.Flush();
        key.Close();
        return;
    }

    //Exception thrown here to test if key is valid.
}

Ответы [ 2 ]

4 голосов
/ 18 марта 2011

Если вы работаете в локальной системной учетной записи, HKEY_Current_User отсутствует.

Фактически, во многих случаях, даже если вы запускаете службу в качестве учетной записи пользователя, HKEY_CURRENT_USER не будет, потому что служба обычно не создает полную станцию ​​Windows - она ​​просто использует учетную запись пользователя для аутентификации , а не профиль.

Это одна из нескольких причин того, что многие приложения с поддержкой автоматизации COM не могут использоваться службами.

Однако вы сможете получить доступ к HKEY_LOCAL_MACHINE.

Редактировать Если вы запускаете службу как определенную учетную запись пользователя (или если поток в вашей службе олицетворяет определенную учетную запись пользователя), вы можете использовать функцию RegOpenCurrentUser для получения дескриптора нужного ключа, а затем использовать RegistryKey. FromHandle использовать его из .Net API.

0 голосов
/ 18 марта 2011

Прежде всего, я не имею понятия о реестре в C #. Это только догадки.

  1. Вы пробовали F11-пошаговое выполнение кода? Может быть, поток не так, как ожидалось? Код даже запущен?

  2. SetValue вернул значение, указывающее на ошибку?

  3. Должен ли путь заканчиваться обратной косой чертой?

  4. Windows перенаправила вызов записи в виртуальный путь? Проверьте, прочитав ключ сразу после записи, и сравните с ручным просмотром реестра.

Обновление Ваш комментарий:

Выполнение в консольном приложении для проверки ошибок - очень хорошая идея. Поскольку это сработало, пункт 3 может быть удален - остальное все еще действует. Может быть, Windows пишет в виртуальный путь для пользователя вашего сервера?

Попробуйте запустить консольное приложение как пользователь службы (также используя F11).

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