Установка ключа реестра не работает. Иногда - PullRequest
0 голосов
/ 26 февраля 2010

Я пытаюсь установить ключ реестра в моем коде C #, но он не работает все время. Иногда это работает, иногда нет. Я начинаю сходить с ума ... В предыдущих проектах у меня не было проблем с записью и чтением в реестр, но я делаю сейчас.

Вот код, который я использую:

string newVersion = "10A";
RegistryKey key = null;
try
{
    key = Registry.CurrentUser.CreateSubKey("Software\\stuff1\\stuff2 " + newVersion + "\\" + newVersion + "\\stuff3\\Settings", RegistryKeyPermissionCheck.ReadWriteSubTree);
    key.SetValue("CopyConvertDone", "1", RegistryValueKind.String);
    key.Flush();
    rep.Message("CopyConvertDone registry key set for revision: " + newVersion);
}
catch (Exception e)
{
    rep.Error(e);
}
finally
{
    if (key != null)
    {
        key.Close();
    }
    else
    {
        rep.Error("Registry key is set to null.");
    }
}

То, что я уже пробовал, но не сработало: - Вместо использования CreateSubKey я попытался OpenSubKey с параметром записи, установленным в true. - Добавлен метод .Flush (). - Сделал Thread.Pause (2000), чтобы дать ему некоторое время перед развитием моей программы (которой нужен этот раздел реестра)

Я не получаю никакой ошибки, и подраздел уже существует, но значение (CopyConvertDone) нет.

Может кто-нибудь увидеть проблему в этом коде и есть возможное решение?

Ответы [ 3 ]

3 голосов
/ 26 февраля 2010

Код выглядит хорошо для меня, однако, если он работает некоторое время, возможно, используйте Process Monitor , чтобы увидеть, какие вызовы поступают в реестр, а какие преуспевают / не справляются.

2 голосов
/ 05 августа 2010

Если бы что-то подобное случилось со мной только сейчас, и с помощью Process Monitor, как предложил Антоний, я обнаружил, что Windows 7 перенаправляла мои записи на ключ в HKCU\Software\Classes\VirtualStore\MACHINE.

Просто указатель на случай, если кто-то еще имеет эту проблему.

0 голосов
/ 26 февраля 2010

выглядит правильно. Может быть, попытаться удалить Flush. Из MSDN: An application should only call Flush if it must be absolute certain that registry changes are recorded to disk. In general, Flush rarely, if ever, need be used.

Вы уже закрываете RegistryKey в операторе finally.

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