Je dois présenter un assistant une fois, la première fois que mon application de formulaires Windows est lancée après l'installation. Je pourrais utiliser un paramètre utilisateur comme firstrun = false, je suppose. Mais j'ai aussi besoin de gérer le cas où le programme est désinstallé, puis réinstallé. Comment ce paramètre utilisateur sera-t-il réinitialisé? Il est déjà présent dans le fichier de configuration dans ... \ Users - utilisateur - \ AppData \ Roaming ... pour cet utilisateur. J'ai besoin de l'assistant pour fonctionner après toute réinstallation, donc j'ai besoin de réinitialiser ce paramètre. Ai-je besoin de le faire avec une action d'installation personnalisée?C# winforms: détermine la première exécution du programme
Répondre
Il est probablement préférable que votre installateur crée la clé FirstRun dans le registre et la place à true (ou 1 ou autre), et assurez-vous que votre programme de désinstallation supprime entièrement cette clé. Ensuite, faites en sorte que votre application lise cette clé au démarrage et définissez-la sur false (ou 0 ou autre).
Si l'utilisateur désinstalle, puis réinstalle votre application, il la voit à nouveau la première fois qu'il l'exécute.
Vous pouvez créer un fichier dans le répertoire du programme. Le programme de désinstallation ne supprime pas cela, car il n'a pas été ajouté par le programme d'installation.
Utilisez une paire nom-valeur telle que FirstRun = true dans un fichier de paramètres ou un fichier resx. Lisez ce fichier au démarrage, si vrai, affichez Wizard et mettez false.
Chaque fois que vous installez, la copie du fichier doit être écrasée et donc vous obtiendrez FirstRun = true. L'assistant est exécuté après chaque (ré) installation.
Cela ne va pas fonctionner correctement pour les scénarios avec plusieurs utilisateurs Windows. Si le fichier est par installation, l'assistant de première exécution s'exécutera uniquement pour le premier utilisateur. Si c'est par utilisateur, l'installation ne l'écrasera que pour l'utilisateur qui effectue l'installation. –
Deux choses différentes - s'il s'agit d'un paramètre au niveau de l'application, cette idée fonctionnerait .. stocker-et-rechercher dans un emplacement indépendant de l'utilisateur comme le dossier programme/installation. S'il s'agit d'un paramètre au niveau de l'utilisateur, stockez-le dans un emplacement spécifique à l'utilisateur. Dépend de ce que le req est ... – Gishu
Le registre Windows semble être l'emplacement approprié pour ce type de paramètre. Une étape du programme d'installation peut réinitialiser la clé lorsque l'utilisateur réinstalle ou vous pouvez simplement effacer la clé de registre lors de la désinstallation si vous ne souhaitez pas conserver de paramètres entre les installations.
Problème avec le registre est si le paramètre va dans HKCU alors c'est une douleur et non-standard pour effacer cela avec le programme d'installation pour les utilisateurs autres que l'utilisateur actuel. Donc, si un utilisateur différent lance l'installation (un), vous n'avez pas vraiment accès à HKCU. – Rory
Sauf si vous utilisez une clé ou une valeur dans HKLM pour conserver une liste des utilisateurs qui ont exécuté l'Assistant. J'aime cette idée, mais vous rencontrez des problèmes d'autorisation car de nombreux utilisateurs ne peuvent pas écrire sur HKLM. Ce qui me fait penser que la réponse de @ Franci est la meilleure. – Rory
Un paramètre true/false par utilisateur ne fonctionnera jamais correctement dans le cas de plusieurs utilisateurs Windows utilisant la même application. Le programme d'installation est exécuté une seule fois en tant qu'utilisateur Windows et n'a pas accès aux paramètres par utilisateur pour tous les autres utilisateurs de cette machine.
Vous pouvez avoir un indicateur par machine qui serait défini sur true lors de l'installation. Toutefois, si un utilisateur admin exécute FRW et le modifie, aucun autre utilisateur ne recevra FRW. Si un utilisateur non administrateur exécute FRW, il ne pourra pas le modifier et exécutera FRW lors de la prochaine exécution de l'application.
Ce dont vous avez besoin est un horodatage à l'échelle de la machine de l'isntallation et un horodatage par utilisateur de l'exécution de FRW. Voici le scénario:
Lors de l'installation, ajoutez un horodatage dans le registre HKLM pour votre application. Pour chaque utilisateur, lorsque l'application est démarrée, vérifiez l'horodatage de la première exécution wizzard (FRW) dans le fichier de paramètres par utilisateur que vous avez mentionné ci-dessus. Si l'horodatage par utilisateur est plus ancien que le cachet d'installation HKLM, exécutez le FRW pour cet utilisateur et mettez à jour le fichier de paramètres par utilisateur.
Si l'application est désinstallée puis réinstallée, le programme d'installation met à jour l'horodatage HKLM, ce qui entraîne la réexécution de l'Assistant FRW pour tous les utilisateurs.
Je suggère de changer le comportement de votre programme et ne pas réinitialiser les paramètres de configuration après la réinstallation. Après tout, l'utilisateur a déjà fait son choix, pourquoi poser à nouveau la même question?
Et si le programme pouvait introduire de nouveaux paramètres importants dans la nouvelle version? :-) –
Dans ce cas, votre fichier de configuration manquerait ces nouveaux paramètres importants et sur la base de cela, vous afficheriez l'assistant de configuration au démarrage. –
Bien sûr, cela fonctionne aussi bien. Je trouve juste que le FRW est un bon endroit pour présenter la nouvelle fonctionnalité à l'utilisateur, mais après que c'est à elle de l'utiliser ou non. –
On pourrait stocker une liste d'utilisateurs qui ont déjà exécuté l'assistant de configuration.
Cette liste peut être stockée dans un fichier de configuration de niveau machine ou dans le répertoire de l'application. Lorsque l'application est réinstallée, cette liste peut être supprimée.Au lieu de regarder FirstRun, vous devriez simplement vérifier l'utilisateur actuel avec la liste. Si l'utilisateur est dans la liste, ignorez l'assistant de configuration. Si l'utilisateur ne figure pas dans la liste, affichez l'assistant de configuration.
Ou faites ceci mais stockez une valeur dans HKLM, par ex. une valeur à plusieurs chaînes. – Rory
similaires à la suggestion de @Franci Penov, je le ferais comme ceci:
Lors de l'installation, créez une valeur de Registre HKLM \ Software \ VotreEntreprise \ YourApp \ InstallId l'aide d'un nouveau GUID généré.
Lors de la première exécution pour un utilisateur, comparez cette valeur à HKCU \ Software \ YourCompany \ YourApp \ InstallId.
Si la valeur HKCU n'existe pas ou est différente, exécutez votre première logique, puis copiez HKLM \ Software \ YourCompany \ YourApp \ InstallId dans HKCU \ Software \ YourCompany \ YourApp \ InstallId.
Cela a l'avantage (minuscule) de ne pas être sensible aux changements de temps.
- 1. Première exécution de l'animation WPF
- 2. Exécution d'un autre programme à partir du projet C# setup
- 3. Eclipse - Compilation et exécution du programme
- 4. Exécution d'un programme Java
- 5. Compilation et exécution de code C# par programme
- 6. Exécution du filtre "Luminosité" de Photoshop par programme
- 7. Exécution d'un programme de ressort à l'intérieur du serveur d'applications
- 8. Exécution d'un programme à partir du code Java
- 9. Exécution du code C++ via NUnit
- 10. C# WinForms Imprimer l'intégralité du formulaire
- 11. Exécution d'un programme d'installation ou vérification de l'installation d'un programme
- 12. Les cibles personnalisées sont ignorées après la première exécution dans la construction TFS
- 13. C# passe les données du programme au 3ème programme d'application
- 14. C# Winforms-WPF interop
- 15. Exécution d'un autre programme d'installation dans une installation Inno Setup
- 16. HTMLParser convertit uniquement la première ligne du fichier
- 17. Exécution différée en C#
- 18. Compilation du programme C++ sous Windows XP
- 19. Comment extraire lastexitcode de $ de C# exécution du script Powershell
- 20. C# WinForms Naming Convention
- 21. Comment obtenir la version du produit pour mon programme Silverlight?
- 22. C# Winforms Irregular Windows
- 23. Erreur LoaderLock à la fin du programme
- 24. C# instancier/initialiser l'objet au démarrage du programme
- 25. C#, WinForms et méthodes d'extension
- 26. C# Winforms Comment mettre à jour toolStrip dans la fonction
- 27. Comment ne prendre que la première ligne du texte multiligne
- 28. Conserver l'en-tête avec la première ligne du bloc suivant
- 29. Comment afficher la première page du module dans joomla 1.5.9?
- 30. Résultat d'un petit programme C
Si cette clé de Registre est par utilisateur, seul l'utilisateur qui a installé l'application recevra FRW. Si cette clé est dans HKLM, seuls les utilisateurs administrateurs seront en mesure de la mettre à jour. Ainsi, tout utilisateur non administrateur continuera à recevoir l'Assistant FRW, jusqu'à ce qu'un administrateur exécute l'application. –
True. De plus, je pense que MS n'encourage plus l'utilisation du registre. Les vieilles habitudes ont la vie dure. – MusiGenesis
C'est ce que j'ai fini par faire. Mais je passe à une autre technique où le FRW vérifie une table de base de données. –