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?

Foi útil?

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:

  1. É armazenado no user do registro (HKCU por exemplo) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist]
  2. O caminho é armazenado em ROT13 assim, por exemplo RunMe.exe se tornaria ehazr.rkr
  3. 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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top