Всем привет, сделал приложение Windows Form на с#. При запуске программа должна автоматически загружаться пр входе пользователя в систему. Проверять и обновлять ключ в реестре так, чтобы запускаться через раз. Идея состоит в том, что при загрузке операционной системы проверяется значение ключа реестра “key”. Если значение “key”- не ноль, то программа - не запускается и меняет значение “key” на 0, чтобы запуститься при следующем запуске. Если же“check”- ноль, то программа запускается. Вот примерный код, который просто должен менять значение ключа, но почему то не делает этого.
RegistryKey myKey = Registry.CurrentUser.OpenSubKey("Keys", true);
if (myKey != null)
{
Application.Exit();
myKey.SetValue("key", "0", RegistryValueKind.String);
myKey.Close();
}
if (myKey == null)
{
myKey.SetValue("key", "1", RegistryValueKind.String);
myKey.Close();
}
Application.Exit();
myKey.SetValue("key", "0", RegistryValueKind.String);
myKey.Close();
Поздно. Приложение уже закрылось, ничего никуда не запишется. Переставь строки.
Смотрим логику вашего кода:
RegistryKey myKey = Registry.CurrentUser.OpenSubKey("Keys", true); - вы открываете раздел Keys, а он есть у вас? Я думаю, что нет..if (myKey != null) - вы проверяете как раз, есть ли он у вас.else) - вы пытаетесь записать в не существующий объект (то есть NULL) значение key. Получаете ошибку...Ваш сначала надо создать раздел, если его нет, примерно так:
RegistryKey myKey = Registry.CurrentUser.OpenSubKey("Keys", true);
if (myKey == null) myKey = Registry.CurrentUser.CreateSubKey("Keys");
Далее уже, пытаться получить значение Key и изменить его:
var key = myKey?.GetValue("Key", 0);
if (key != null && (string) key == "0")
{
myKey.SetValue("key", "1", RegistryValueKind.String);
}
//else.....
Код написал примерный, но суть думаю ясна.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей