C # 2008 / 3.5 SP1
Je veux vérifier si l’application est en cours d’exécution pour la première fois. J’ai développé une application et une fois celle-ci installée sur l’ordinateur client. Je veux vérifier si c’est la première fois que je cours.
J’ai installé en utilisant le projet d’installation Windows.
if (System.Deployment.Application.ApplicationDeployment.CurrentDeployment.IsFirstRun) { // Do something here }
Le code ci-dessus fonctionne pour un développement clickonce. Mais comment puis-je faire quelque chose de similaire avec un installateur Windows.
Je pensais à l’ajout d’un registre lors de l’installation de l’application. Vérifiez ensuite cet élément de registre lorsque le programme s’exécute pour la première fois (true). Une fois qu’il a été exécuté pour la première fois, modifiez le registre en (false).
Cependant, plutôt que d’utiliser le registre, existe-t-il une meilleure méthode que je peux utiliser?
Le dossier de données de l’application est un bon endroit pour stocker des données d’application en dehors du registre. Si vous créez ce répertoire lors de la première utilisation, il vous suffira de le tester lors des chargements suivants. De plus, si votre application le requirejs, vous disposez alors d’un bon emplacement de stockage pour les données.
ssortingng data = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); ssortingng name = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; ssortingng path = Path.Combine(data, name); if (Directory.Exists(path)) { // application has been run } else { // create the directory on first run DirectoryInfo di = Directory.CreateDirectory(path); }
Ajoutez simplement une valeur booléenne à vos parameters d’applications. Le moyen le plus simple consiste à utiliser l’EDI et le concepteur de parameters. Il doit s’agir de la scope de l’utilisateur, mais la scope de l’application n’est pas accessible en écriture.
N’oubliez pas de changer la valeur et d’enregistrer les parameters lors de la première détection.
Le code ressemble à ceci:
if (Properties.Settings.Default.FirstUse) { Properties.Settings.Default.FirstUse = false; Properties.Settings.Default.Save(); // do things first-time only }
Le registre semble bien. Vous voudrez probablement vous assurer que vous effectuez correctement la première initialisation avant de définir la valeur sur false et vous pouvez éventuellement donner à l’utilisateur la possibilité de le réinitialiser si nécessaire.
Plutôt que de jouer avec le registre, vous pouvez simplement stocker un fichier dans le dossier du compte de l’utilisateur. Je ne me souviens pas de l’emplacement exact, mais vous pouvez effectuer un appel pour obtenir l’emplacement du dossier des parameters de l’utilisateur.
Pour déterminer si une application est déjà exécutée, je recherche le fichier FirstTime.txt dans le répertoire des fichiers exécutables. Je place ce fichier dans le répertoire de l’exécutable car je sais que ce répertoire est supprimé lors d’une désinstallation. Ainsi, lorsque l’application est redéployée, je suis rassuré que ce fichier ne sera pas là. J’utiliserai donc les parameters d’application statiques pour configurer initialement mes parameters utilisateur, que l’utilisateur peut modifier via l’application, car ils ne sont que cela – parameters utilisateur .
J’enregistre ces parameters utilisateur lorsque l’événement form_closing est déclenché. Même si des parameters utilisateur antérieurs à un déploiement précédent avaient été définis , sachant que FirstTime.txt n’est pas présent (me permettant ainsi de savoir qu’il s’agit du premier démarrage de l’application), je suis assuré que les parameters utilisateur sont réinitialisés aux parameters d’application statiques. la première fois que l’application est exécutée (à moins, bien sûr, que l’utilisateur modifie ces parameters avant de fermer l’application).
Quoi qu’il en soit, voici un extrait de code pour vérifier si l’application a déjà été exécutée:
/// /// Check if this is the first time ADDapt has ever executed /// /// /// We know that ADDapt has run before with the existence of FirstTime.txt. /// /// /// False - this was the first time the application executed /// /// /// Application base directory /// public bool CheckFirstTime(Ssortingng ADDaptBinDirectory) { bool bADDaptRunFirstTime = false; Ssortingng FirstTimeFileName = ssortingng.Format("{0}//FirstTime.txt", ADDaptBinDirectory); // Find FirstTime.txt in Bin Directory if (File.Exists(FirstTimeFileName)) bADDaptRunFirstTime = true; else { // Create FirstTime file } return bADDaptRunFirstTime; } /// /// Create the FirstTime file /// /// /// Saving the creation date in the first time documents when the app was initially executed /// /// /// Full windows file name (Directory and all) /// private void CreateFirstTimeFile(Ssortingng FirstTimeFN) { FileInfo fi = new FileInfo(FirstTimeFN); DateTime dt = DateTime.Now; using (TextWriter w = fi.CreateText()) { w.WriteLine(ssortingng.Format("Creation Date: {0:g} ", dt)); } }