2010-03-02 2 views
7

Lorsque mon logiciel est installé via un MSI, il crée des clés de registre dans HKLM. Lorsque les utilisateurs utilisent le logiciel, leurs préférences individuelles sont enregistrées dans HKCU. Lorsque le logiciel est désinstallé, les clés de registre HKLM et HKCU sont supprimées, mais je pense que seules les clés HKCU de l'utilisateur exécutant la désinstallation seront supprimées. Est-ce correct? Si oui, comment puis-je m'assurer que les sous-clés HKCU pour les autres personnes ayant utilisé mon logiciel sur la même machine sont supprimées? MISE À JOUR: Les 'préférences individuelles' qui sont sauvegardées dans mon cas ne sont pas vraiment des paramètres que l'utilisateur a choisis, mais plutôt des données que l'application a stockées en cours d'exécution pour cet utilisateur. Ce ne sont donc pas vraiment des données que l'utilisateur voudrait conserver. Il semble correct de le supprimer lors de la désinstallation car il n'aura aucune utilité si l'application est réinstallée. Donc, je suppose que la meilleure suggestion à ce jour est Ed's: don't use the registry, même si cela ne résout pas vraiment la question initiale.Comment supprimer les clés de registre HKCU lors de la désinstallation du logiciel?

Répondre

2

La réponse courte est que vous ne le faites pas. Le programme d'installation est prévu pour supprimer les entrées crée et rien d'autre. Si votre application crée des paramètres par utilisateur à l'exécution, ceux-ci n'appartiennent pas à la routine d'installation. Si vous voulez vraiment vraiment faire cela, vous pouvez créer une action personnalisée et forcer la désinstallation à s'exécuter en tant qu'administrateur pour pouvoir accéder à toutes les ruches de l'utilisateur. Soyez averti - ceci est un comportement complètement non standard et peut-il prendre un temps considérable & ressources système pour monter & démonter toutes les ruches de l'utilisateur. Et si votre programme de désinstallation ne fait pas attention, vous pouvez endommager les ruches au niveau du système et rendre votre système non amorçable.

Comme je le mentionne dans le commentaire de la réponse de sascha, les meilleures pratiques de Windows Installer disent (dit?) De laisser les paramètres utilisateur personnalisés lors de la désinstallation. Ainsi, si l'utilisateur réinstalle votre logiciel, ses paramètres sont disponibles.

+0

Je ne peux pas simplement faire une boucle dans chacune des sous-arborescence de HKEY_USERS et supprimer mes données? Ou est-ce que ce que vous dites sera lent? – Rory

+0

Il est dangereux de supprimer des données de cette manière dans les scénarios avec des profils itinérants. Je suis un peu flou sur les détails, mais je pense que cela détraque les comparaisons d'horodatage et peut entraîner la perte de données de profil si le profil incorrect est sélectionné comme vainqueur de la "fusion". –

+1

OK, reconnaissez que ce n'est * pas * "vos données". Une fois dans une ruche de registre d'utilisateurs, ce sont les données * de l'utilisateur. Et oui, le chargement et le déchargement des ruches de l'utilisateur séparé est assez lent. Et vous devez SCRUPULUSement ne faire rien aux profils de compte système, de sorte que vous devez d'abord identifier les profils utilisateur réguliers. Et comme le mentionne MichaelU, si des profils itinérants sont utilisés, vous risquez d'endommager des objets n'appartenant pas à votre application (voulez-vous vraiment qu'un groupe informatique client vous facture une facture pour la reconstruction de tous ses profils utilisateur?). C'EST UNE MAUVAISE IDÉE. – DaveE

2

Cela n'est pas possible, seules les entrées de l'utilisateur actuel sont supprimées.

Vous pouvez utiliser ActiveSetup pour contourner ce problème, mais il est à peu près non documenté en dehors de ce lien et non pris en charge par Microsoft. Donc, si vous l'utilisez, ne comptez pas dessus;)

L'idée de ne pas supprimer les données utilisateur lors de la désinstallation est un sujet plutôt controversé avec un historique plutôt intéressant ... Je me souviens des anciennes versions d'Office utilisées pour sauvegarder documents sous le répertoire d'installation, le nombre de plaintes que nous recevions lorsque, après une mise à niveau, les utilisateurs supprimeraient l'ancien dossier Office et perdraient leurs documents était énorme. Plus récemment, la plainte est que les gens perdent leur modèle personnalisé Normal.dot. En tant que personne impliquée dans les logiciels d'entreprise, je pense que si les gens comptent sur votre logiciel dans le cadre de leur flux de travail et prennent le temps de personnaliser les paramètres, ne supprimez pas les paramètres lors de la désinstallation. D'un autre point de vue, si vous désinstallez un jeu que vous avez perdu des heures/jours/semaines à jouer, voudriez-vous que vos sauvegardes soient supprimées? Vos fichiers de configuration personnalisés? Qu'en est-il d'un jeu sur un ordinateur familial partagé, quelqu'un désinstalle un jeu pour libérer de l'espace disque, ne sachant pas qu'un autre membre de la famille le joue régulièrement. Voulez-vous traiter ce genre de plaintes de vos clients?

+0

>> Si les gens comptent sur votre logiciel dans le cadre de leur workflow et prennent le temps de personnaliser les paramètres, ne supprimez pas les paramètres lors de la désinstallation. << IIRC, qui fait également partie de Windows Installer Best Les pratiques. – DaveE

+0

@DaveE merci ... J'avais oublié où je l'avais lu à l'origine :) – saschabeaumont

3

Si vous voulez vraiment pouvoir éliminer les données utilisateur, stockez les données utilisateur sur le système de fichiers. Quelque part comme "Documents and Settings \ nom d'utilisateur \ Application Data \ Your Organization \ Your Application". Ces données seraient triviales à supprimer lors de la désinstallation, avec une entrée dans la table RemoveFile.

L'équipe de développement Windows Installer a spécifiquement abordé cette question sur son blog. Voir "Règle 26". http://blogs.msdn.com/windows_installer_team/archive/2006/05/12/595950.aspx

Mise à jour:

Code il y a j'ai écrit plusieurs années qui fait ce que vous décrivez avec le registre, et vint rapidement à le regretter. C'était une douleur, mais plus que cela, il y avait un problème lié aux privilèges. La version courte est que le service d'installation ne fonctionne pas avec tous les privilèges d'Admin. Ils ne sont pas seulement désactivés, ils sont absents du jeton de sécurité du processus. Notamment cela inclut le privilège nécessaire pour charger et décharger les ruches de registre (se_restore_privilege si je me souviens bien). Cela a provoqué la rupture du code pour l'installation et la désinstallation en mode silencieux, même si l'utilisateur appelant était Admin, et je ne pouvais pas simplement refuser l'installation et la désinstallation silencieuse.

Un autre problème qui n'est pas encore survenu est Active Directory. Je ne suis pas certain, mais je pense que ce que vous décrivez va avoir de sérieux obstacles supplémentaires à franchir dans un environnement AD.

En général, j'essaie très fort d'éviter que les installations ou désinstallations touchent la ruche HKCU. J'ai trouvé cela comme une source constante de douleur significative pour un bénéfice minimal.

Questions connexes