Сколько раз программа запускалась? C # - PullRequest
6 голосов
/ 05 августа 2009

Как узнать, сколько раз программа запускалась на C # без сохранения файла и подсчета. Если это невозможно, можно получить его из диспетчера запланированных задач?

К. Россу: как это сделать в настройках реестра? прости меня. , , что такое настройка реестра?

Ответы [ 9 ]

13 голосов
/ 05 августа 2009

Я делаю это в настройках реестра.

static string AppRegyPath = "Software\\Cheeso\\ApplicationName";
static string rvn_Runs = "Runs";

private Microsoft.Win32.RegistryKey _appCuKey;
public Microsoft.Win32.RegistryKey AppCuKey
{
    get
    {
        if (_appCuKey == null)
        {
            _appCuKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(AppRegyPath, true);
            if (_appCuKey == null)
                _appCuKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(AppRegyPath);
        }
        return _appCuKey;
    }
    set { _appCuKey = null; }
}

public int UpdateRunCount()
{
    int x = (Int32)AppCuKey.GetValue(rvn_Runs, 0);
    x++;
    AppCuKey.SetValue(rvn_Runs, x);
    return x;
}

Если это приложение WinForms, вы можете перехватить событие OnClosing формы для запуска UpdateCount.

10 голосов
/ 05 августа 2009

Насколько мне известно, Windows не хранит эту информацию для вас. Вам нужно будет где-то подсчитать значение (файл, база данных, настройки реестра). Планировщик заданий Windows имеет очень низкую функциональность.

7 голосов
/ 26 мая 2011

Сколько раз приложение запускалось в реестре; есть несколько предостережений:

  1. Он хранится в реестре пользователя (например, HKCU) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist]
  2. Путь хранится в ROT13 , поэтому, например, runme.exe станет ehazr.rkr
  3. Реестр на самом деле хранит три значения в двоичном виде: последнее время выполнения, количество выполнений (которое начинается с 6 вместо 1 по некоторым причинам) и имя приложения.

Не знаю, помогает ли это, но вот оно у вас!

4 голосов
/ 05 августа 2009

Вот учебник для обработки реестра - C # Основы реестра

1 голос
/ 07 августа 2009

Вы можете просто создать настройку приложения под названием Properties.Settings.Default.TimesRun;

Используйте это так:

private void Form1_Load( object sender, EventArgs e )
{
   Properties.Settings.Default.TimesRun = timesrun++;
   Properties.Settings.Default.Save();
}
0 голосов
/ 05 августа 2016
int x = Your_Project.Properties.Settings.Default.Counter;
x++;
Your_Project.Properties.Settings.Default.Counter = x;
Your_Project.Properties.Settings.Default.Save();
0 голосов
/ 05 августа 2009

@ Cheeso

Вам не нужно нужна закрытая переменная-член с этим кодом, один способ немного ее уменьшить:

using Microsoft.Win32;
public RegistryKey AppCuKey
{
    get
    {
        return Registry.CurrentUser.OpenSubKey(AppRegyPath, true)
            ?? Registry.CurrentUser.CreateSubKey(AppRegyPath);
    }
}

Или, если вы хотите обновить приватную переменную, чтобы не вызывать метод (в любом случае, это довольно дешевый метод), вы все равно можете сохранить себе if == null check .

0 голосов
/ 05 августа 2009

Я рекомендую использовать базу данных ESENT, которая входит в состав Windows. Программная поддержка легко доступна благодаря ESENT Managed Interface .

0 голосов
/ 05 августа 2009

Нет, диспетчер задач не предоставляет такую ​​информацию. Мне было бы нетрудно создать скрипт, который обновлял бы счет, а затем выполнял бы приложение и затем настраивал задачу для вызова скрипта.

...