Quantas vezes programa foi executado? C #
-
22-07-2019 - |
Pergunta
Como posso obter o número de vezes que um programa anteriormente executados em C # sem manter um arquivo e contagem. Se não é possível dessa forma, ele pode ser obtido a partir do Gerenciador de tarefas agendadas?
Para C. Ross: como isso seria feito em uma configuração de registro? me perdoe. . . o que é uma configuração do registro?
Solução
Para o melhor de meu conhecimento do Windows não manter esta informação para você. Você teria que contar o em algum lugar valor (arquivo, banco de dados, configuração de registro). O Agendador de Tarefas do Windows é muito baixa funcionalidade.
Outras dicas
Eu faço isso em uma configuração de registro.
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;
}
Se for um aplicativo WinForms, você pode ligar evento OnClosing do formulário para executar UpdateCount
.
O número de tempo que um aplicativo foi executado é armazenado no Registro; existem algumas ressalvas, no entanto:
- É armazenado no user do registro (HKCU por exemplo)
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist]
- O caminho é armazenado em ROT13 assim, por exemplo RunMe.exe se tornaria ehazr.rkr
- O registro realmente armazena três valores na forma binária:. O último tempo de execução, a contagem de prazo (que começa às 6 em vez de 1, por alguma razão), eo nome do aplicativo
Não sei se isso ajuda, mas aí está!
Aqui está um tutorial para manipulação de registro - C # Registry Basics
Você poderia simplesmente criar um configuração do aplicativo chamado Properties.Settings.Default.TimesRun;
Use-o assim:
private void Form1_Load( object sender, EventArgs e )
{
Properties.Settings.Default.TimesRun = timesrun++;
Properties.Settings.Default.Save();
}
Não, gerenciador de tarefas não fornece esse tipo de informação. Eu não seria difícil criar um script que iria atualizar um registro e, em seguida, executar o aplicativo e, em seguida, configurar a tarefa de chamar o script.
Eu recomendo usar o banco de dados ESENT que está incluído no Windows. O suporte de software é facilmente disponível com ESENT Managed interface .
Cheeso ,
Você não necessidade a variável de membro particular com esse código, uma maneira de emagrecer um pouco mais baixo:
using Microsoft.Win32;
public RegistryKey AppCuKey
{
get
{
return Registry.CurrentUser.OpenSubKey(AppRegyPath, true)
?? Registry.CurrentUser.CreateSubKey(AppRegyPath);
}
}
Ou, se você gostaria de atualizar a variável privada, a fim de manter-se de chamar o método (que é um método muito barato, de qualquer maneira), você ainda pode salvar a si mesmo uma se == null verificar.
int x = Your_Project.Properties.Settings.Default.Counter;
x++;
Your_Project.Properties.Settings.Default.Counter = x;
Your_Project.Properties.Settings.Default.Save();