Pregunta

¿Cómo puedo obtener la cantidad de veces que un programa se ejecutó previamente en C # sin guardar un archivo y contarlo? Si no es posible de esa manera, ¿se puede obtener del Administrador de tareas programadas?

Para C. Ross: ¿cómo se haría esto en una configuración de registro? Perdóname. . . ¿Qué es una configuración de registro?

¿Fue útil?

Solución

Que yo sepa, Windows no guarda esta información para usted. Tendría que contar el valor en alguna parte (archivo, base de datos, configuración de registro). El Programador de tareas de Windows tiene una funcionalidad muy baja.

Otros consejos

Hago esto en una configuración 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;
}

Si se trata de una aplicación WinForms, puede conectar el evento OnClosing del formulario para ejecutar UpdateCount .

El número de veces que se ejecuta una aplicación se almacena en el registro; Sin embargo, hay un par de advertencias:

  1. Se almacena en el registro usuario (HKCU por ejemplo) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssistfont>
  2. La ruta se almacena en ROT13 para que, por ejemplo, runme.exe se convierta en ehazr.rkr
  3. El registro en realidad almacena tres valores en forma binaria: el último tiempo de ejecución, el recuento de ejecución (que comienza en 6 en lugar de 1, por alguna razón) y el nombre de la aplicación.

No sé si esto ayuda, ¡pero ahí lo tienes!

Aquí hay un tutorial para el manejo del registro - C # Registry Basics

Simplemente puede crear una configuración de la aplicación llamado Properties.Settings.Default.TimesRun;

Úselo así:

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

No, el administrador de tareas no proporciona ese tipo de información. No sería difícil crear un script que actualice una cuenta y luego ejecute la aplicación y luego configure la tarea para llamar al script.

Recomiendo usar la base de datos ESENT que se incluye con Windows. El soporte de software está fácilmente disponible con ESENT Managed Interface .

@ Cheeso ,

No necesita la variable miembro privado con ese código, una forma de reducirlo un poco:

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

O, si desea actualizar la variable privada, para evitar llamar al método (que de todos modos es un método bastante barato), aún puede guardarse un if == null comprobar.

int x = Your_Project.Properties.Settings.Default.Counter;
x++;
Your_Project.Properties.Settings.Default.Counter = x;
Your_Project.Properties.Settings.Default.Save();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top