c# - ¿Cuántas veces se ha ejecutado el programa? DO#
count scheduled-tasks (9)
@ Cheeso ,
No necesita la variable de miembro privado con ese código, una forma de adelgazar un poco:
using Microsoft.Win32;
public RegistryKey AppCuKey
{
get
{
return Registry.CurrentUser.OpenSubKey(AppRegyPath, true)
?? Registry.CurrentUser.CreateSubKey(AppRegyPath);
}
}
O bien, si desea actualizar la variable privada, para evitar llamar al método (que es un método bastante barato, de todos modos), puede ahorrarse una verificación if == null .
¿Cómo puedo obtener la cantidad de veces que un programa se ejecutó previamente en C # sin guardar un archivo y sin contar? Si no es posible de esa manera, ¿puede obtenerse 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?
Aquí hay un tutorial para el manejo del registro: C # Registry Basics
El número de veces que se ejecuta una aplicación se almacena en el registro; Sin embargo, hay un par de advertencias:
- Se almacena en el registro de usuarios (HKCU por ejemplo)
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/UserAssist]
- La ruta se almacena en ROT13, por lo que runme.exe se convertiría en ehazr.rkr
- 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 ya lo tienes!
Lo hago 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 de WinForms, puede enlazar el evento OnClosing del formulario para ejecutar UpdateCount
.
No, el administrador de tareas no proporciona ese tipo de información. No sería difícil crear una secuencia de comandos que actualice una cuenta y luego ejecute la aplicación y luego configure la tarea para llamar al script.
Que yo sepa, Windows no conserva esta información por usted. Tendría que contar el valor en algún lugar (archivo, base de datos, configuración de registro). El Programador de tareas de Windows tiene una funcionalidad muy baja.
Recomiendo usar la base de datos ESENT que se incluye con Windows. El soporte de software está fácilmente disponible con ESENT Managed Interface .
Simplemente podría crear una configuración de aplicación llamada Properties.Settings.Default.TimesRun;
Úselo así:
private void Form1_Load( object sender, EventArgs e )
{
Properties.Settings.Default.TimesRun = timesrun++;
Properties.Settings.Default.Save();
}
int x = Your_Project.Properties.Settings.Default.Counter;
x++;
Your_Project.Properties.Settings.Default.Counter = x;
Your_Project.Properties.Settings.Default.Save();