6
votes

Combien de fois le programme est exécuté? C #

Comment puis-je obtenir le nombre de fois qu'un programme a précédemment exécuté en C # sans maintenir un fichier et taillance. S'il n'est pas possible de ce type, peut-il être obtenu à partir du gestionnaire de tâches planifiées?

à C. Ross: Comment cela serait-il fait dans un paramètre de registre? pardonne-moi. . . Qu'est-ce qu'un paramètre de registre?


2 commentaires

@ "Qu'est-ce qu'un paramètre de registre?" - Le registre est un fichier organisé d'informations contenant des données de programme et de configuration pour une installation donnée de Windows. Chesso fournit un exemple décent de la manière d'interagir avec elle ci-dessous. Ne jouez pas dans le registre, sauf si vous êtes confortable, cela peut être semblable à faire une chirurgie cérébrale sur quelqu'un qui est éveillé (c'est-à-dire très mauvais).


@Donta. Le Cheeso a une excellente réponse. Je recommanderais d'utiliser le leur.


9 Réponses :


10
votes

Au meilleur de mes fenêtres de connaissances ne conserve pas ces informations pour vous. Vous devriez passer à la valeur quelque part (fichier, base de données, paramètre de registre). Le planificateur de tâches Windows est une fonctionnalité très faible.


4 commentaires

@bally qui ne sonne pas comme si c'est une chose saine de s'intégrer à.


@ C.Ross Je pense que vous devez corriger que "Windows ne conserve pas ces informations pour toi". À ma connaissance, c'est sûr (corrigez-moi si je me trompe). Vous n'écrivez pas au registre, vous le lisez simplement.


@Wally, je veux dire que ce n'est pas en sécurité parce que c'est un détail de mise en œuvre du système d'exploitation (ils pourront même le rot13), ils peuvent donc le changer à volonté et casser vos affaires.


@ C.Ross OK. Vous devez toujours supprimer "Windows ne conserve pas ces informations pour vous" Beacuse qui n'est tout simplement pas le cas.



0
votes

Non, le responsable des tâches ne fournit pas ce genre d'informations. Je ne serais pas difficile à créer un script qui mettrait à jour un décompte, puis exécutez l'application, puis configurez la tâche pour appeler le script.


0 commentaires

13
votes

Je le fais dans un paramètre de registre.

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;
}


0 commentaires

4
votes

Voici un tutoriel pour la gestion du registre - C # Bases de registre


0 commentaires

0
votes

Je recommande d'utiliser la base de données ESENT incluse avec Windows. Le support logiciel est facilement disponible avec Interface gérée de Esent .


0 commentaires

0
votes

@ cheeso ,

vous ne besoin la variable membre privé avec ce code, une façon de la réduire un peu: xxx

ou, si vous souhaitez mettre à jour la variable privée, afin de continuer à appeler la méthode (qui est une De toute façon), vous pouvez toujours vous sauvegarder un if == null chèque.


2 commentaires

Avoir une propriété renvoie quelque chose que l'appelant devrait disposer est un design incroyablement mauvais. -1


J'utilise la propriété parce que je me réfère à d'autres paramètres de registre dans d'autres endroits. @erikkallen, je ne vois pas comment il s'agit d'un mauvais design pour retourner une impasse d'un getter. Ce pourrait être une mauvaise conception de ne pas disposer ().




7
votes

Le nombre de fois qu'une application est enregistrée est stockée dans le registre; Il y a quelques mises en garde, cependant:

  1. Il est stocké dans le registre User (HKCU par exemple) [HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ userAssist]
  2. Le chemin est stocké dans Rot13 , donc par exemple, runme.exe deviendrait Ehazr.rkr < / li>
  3. Le registre stocke réellement trois valeurs sous forme binaire: le dernier remontage, le nombre d'exécutions (qui commence à 6 au lieu de 1, pour une raison quelconque) et le nom de l'application.

    Je ne sais pas si cela aide, mais là, vous l'avez!


6 commentaires

Je ne pouvais vraiment pas y croire, mais après avoir fait une petite recherche de devenv.exe en ROT13 (ce qui est QRirai.RKR), j'ai vraiment trouvé des entrées intéressantes sous [HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ UserAssist] .


Wow, c'est assez bizarre. Qu'est-ce que vous accomplissez en stockez-le de cette façon?


Si vous recherchez des projets open source mettant en œuvre ce look sur Github.com/JockiHendry/pogrameXecutionCounter . Il est écrit en C #


@chaz tu as tort. Il s'agit de fenêtres acutalaires qui stockent ces valeurs. Windows enregistre chaque programme que vous ouvrez dans le registre. Certains viennent de découvrir cela et ont trouvé un moyen de déchiffrer les données.


@Bally c'est tout à fait le vieil post, mais on dirait que je viens d'utiliser le mot "vous" comme dans un pronom indéfini, afin de réexaminer cette phrase qu'il aurait dû être "Qu'est-ce que l'on accomplit en stockant de cette façon?" Désolé pour la confusion.


@chaz je ne comprends toujours pas ce que vous dites. Windows stocke automatiquement les valeurs pour des raisons médico-légales, d'espionnage et d'accessibilité. Vous n'avez pas besoin de les stocker. Vous venez de lire ces valeurs du registre et de les déchiffrer.



0
votes
int x = Your_Project.Properties.Settings.Default.Counter;
x++;
Your_Project.Properties.Settings.Default.Counter = x;
Your_Project.Properties.Settings.Default.Save();

1 commentaires

Tandis que cet extrait de code peut résoudre la question, , y compris une explication contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas participer à votre code avec des commentaires explicatifs, car cela réduit la lisibilité du code et des explications!