Domanda

Come posso ottenere il numero di volte in cui un programma è stato precedentemente eseguito in C # senza tenere un file e eseguire il conteggio. Se non è possibile in questo modo, può essere ottenuto dal Task Manager programmato?

A C. Ross: come si farebbe in un'impostazione del registro? perdonami. . . che cos'è un'impostazione di registro?

È stato utile?

Soluzione

Per quanto ne so, Windows non conserva queste informazioni per te. Dovresti calcolare il valore da qualche parte (file, database, impostazioni del registro). L'Utilità di pianificazione di Windows ha una funzionalità molto bassa.

Altri suggerimenti

Lo faccio in un'impostazione del 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 si tratta di un'app WinForms, è possibile collegare l'evento OnClosing del modulo per eseguire UpdateCount .

Il numero di volte in cui un'app è stata eseguita è memorizzata nel registro; ci sono un paio di avvertenze, tuttavia:

  1. È archiviato nel registro utente (ad esempio HKCU) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist94
  2. Il percorso è archiviato in ROT13 , ad esempio runme.exe diventerebbe ehazr.rkr
  3. Il registro in realtà memorizza tre valori in forma binaria: l'ultimo runtime, il conteggio delle esecuzioni (che inizia per 6 anziché 1, per qualche motivo) e il nome dell'applicazione.

Non so se questo aiuta, ma il gioco è fatto!

Ecco un tutorial per la gestione del registro - Nozioni di base sul registro C #

Potresti semplicemente creare una impostazione dell'applicazione chiamato Properties.Settings.Default.TimesRun;

Usalo in questo modo:

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

No, il task manager non fornisce quel tipo di informazioni. Non sarebbe difficile creare uno script che aggiorni un riscontro e quindi esegua l'applicazione e quindi configuri l'attività per chiamare lo script.

Consiglio di utilizzare il database ESENT incluso in Windows. Il supporto software è facilmente disponibile con ESENT Managed Interface .

@ Cheeso ,

Non ti serve la variabile membro privata con quel codice, un modo per ridurla un po ':

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

Oppure, se ti piace aggiornare la variabile privata, per evitare di chiamare il metodo (che è comunque un metodo abbastanza economico), puoi comunque salvarti un if == null controllare.

int x = Your_Project.Properties.Settings.Default.Counter;
x++;
Your_Project.Properties.Settings.Default.Counter = x;
Your_Project.Properties.Settings.Default.Save();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top