2008-10-17 9 views
2

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

2

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.

+0

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. –

+0

True. De plus, je pense que MS n'encourage plus l'utilisation du registre. Les vieilles habitudes ont la vie dure. – MusiGenesis

+0

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. –

0

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.

1

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.

+0

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. –

+0

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

2

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.

+0

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

+1

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

2

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.

0

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?

+0

Et si le programme pouvait introduire de nouveaux paramètres importants dans la nouvelle version? :-) –

+0

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. –

+0

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. –

1

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.

+0

Ou faites ceci mais stockez une valeur dans HKLM, par ex. une valeur à plusieurs chaînes. – Rory

0

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.

Questions connexes