2009-08-05 3 views
6

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

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

+0

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

+0

@ Donta. У Cheeso есть отличный ответ. Я бы рекомендовал использовать их. –

ответ

10

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

+2

+1, для идеи записи в реестре. – nik

+0

На самом деле это так. http://stackoverflow.com/a/6134506/3620828 – Wally

+0

@wally Это не похоже, что это безопасно для интеграции. –

0

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

13

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

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.

+8

Пребывание в моем реестре! – jason

+11

Не запускайте мой код! – Cheeso

+2

+1 причина выданного кода, очень хорошая –

0

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

0

@Cheeso,

Вам не нужно приватную переменную-член с этим кодом, один из способов тонкий его немного вниз:

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

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

+0

Наличие свойства возвращает то, что вызывающий должен распоряжаться, является невероятно плохим дизайном. -1 – erikkallen

+0

Я использую свойство, потому что я ссылаюсь на другие настройки реестра в других местах. @erikkallen, я не вижу, как плохой дизайн возвращает IDisposable из геттера. Возможно, это плохой дизайн, а не Dispose(). – Cheeso

1

Вы можете просто создать application setting называется Properties.Settings.Default.TimesRun;

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

private void Form1_Load(object sender, EventArgs e) 
{ 
    Properties.Settings.Default.TimesRun = timesrun++; 
    Properties.Settings.Default.Save(); 
} 
6

Количество времени приложение побежал хранится в реестре; Есть несколько предостережений, хотя:

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

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

+1

Я действительно не мог в это поверить, но после небольшого поиска devenv.exe в ROT13 (который является qrirai.rkr) я действительно нашел интересные записи в разделе '[HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ UserAssist ] '. – Oliver

+0

Вау, это довольно странно. Что вы делаете, сохраняя его таким образом? – chaz

+1

Если вы ищете проекты с открытым исходным кодом, реализующие этот вид https://github.com/JockiHendry/ProgramExecutionCounter. Это написано на C# – Wally

0
int x = Your_Project.Properties.Settings.Default.Counter; 
x++; 
Your_Project.Properties.Settings.Default.Counter = x; 
Your_Project.Properties.Settings.Default.Save(); 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, так как это уменьшает читаемость кода и объяснений! – FrankerZ

Смежные вопросы