Запуск программы через раз

268
13 апреля 2018, 14:39

Всем привет, сделал приложение 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();
}
Answer 1
Application.Exit();
myKey.SetValue("key", "0", RegistryValueKind.String);
myKey.Close();

Поздно. Приложение уже закрылось, ничего никуда не запишется. Переставь строки.

Answer 2

Смотрим логику вашего кода:

  1. RegistryKey myKey = Registry.CurrentUser.OpenSubKey("Keys", true); - вы открываете раздел Keys, а он есть у вас? Я думаю, что нет..
  2. if (myKey != null) - вы проверяете как раз, есть ли он у вас.
  3. Допустим его нет (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.....

Код написал примерный, но суть думаю ясна.

READ ALSO
Что лучше использовать IComparer или IComparable?

Что лучше использовать IComparer или IComparable?

Что лучше использовать для сортировки IComparer или IComparable?Можете сказать что из них лучше использовать и почему? Лично я сам не совсем понял что...

281
Удаление строк с дубликатами букв

Удаление строк с дубликатами букв

Пожалуйста подскажите, к примеру есть массив из 4 строк

218
Сравнение значений

Сравнение значений

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

224
C# Разрезать текстовый файл по разделителям и сохранить в множество файлов

C# Разрезать текстовый файл по разделителям и сохранить в множество файлов

Вопрос: Есть 1 текстовый файл, в котором указаны пути файловВ списке нет разделителей типа ; или каких либо других

227