Question

J'ai un projet d'installation dans Visual Studio. Dans le cadre de l'installation régulière, il crée / met à jour des clés et des valeurs dans le Registre Windows. Comment puis-je faire les mises à jour réversibles?

vous pouvez dire « ils sont réversibles », mais je ne pense pas. Voici comment je pense que cela fonctionne: Utilisez le concepteur VS pour spécifier les clés de Registre et les valeurs que vous voulez. Ces clés et valeurs sont écrites lors de l'installation, et supprimés lors de la désinstallation. Facile. Ce qui est irréversible?

Le problème vient quand il y a une valeur existante dans l'une des clés qui est écrit lors de l'installation. Supposons qu'il a une valeur de 1. Puis, avec la nouvelle installation, il obtient une valeur de 100. Une fois la désinstallation, il n'a pas de valeur du tout - la valeur a disparu.


J'ai essayé de contourner ce avec « des actions personnalisées ».

Lors de l'installation, si l'utilisateur confirme, msiexec écrit les valeurs dans le Registre. Tout ce qui était dans la clé de Registre avant, est disparu. (Appelons cette "mise à jour A")

Pour préserver cette valeur, lors de l'installation, il y a une action personnalisée qui lit et conserve le réglage « avant ». Il fonctionne avant "Mise à jour A". Jusqu'ici tout va bien.

Désinstaller, le cours normal de l'action, est de supprimer les clés de Registre régulières et des valeurs qui ont été ajoutés lors de l'installation. Cela fonctionne très bien. Appelez cette « mise à jour B ».

Pour restaurer les valeurs de registre d'origine, j'ai une autre « action personnalisée ». Celui-ci fonctionne sur la désinstallation. Il restaure avec succès les valeurs d'origine dans le Registre. Le registre semble tout comme il était avant l'installation d'origine. J'ai vérifié que cela fonctionne en utilisant ProcMon (Un outil qui me permet de surveiller les mises à jour de registre, entre autres). Appelez cette « mise à jour C ».

Il n'y a qu'un seul problème. Lors de la désinstallation, mise à jour B se passe après Mise à jour C. Cela signifie, après l'action personnalisée rétablit le paramètre de Registre d'origine, msi efface la valeur restaurée, comme il le fait avec toutes les autres mises à jour de registre.

Le résultat est le registre a des valeurs vides au lieu de les restaurer.

Toute aide? Comment puis-je réorganiser les mises à jour? Ai-je besoin Orca pour cela? Je ne veux vraiment pas installer et d'apprendre un autre outil pour ce faire. Je veux aussi qu'il soit automatique. Sans aucun doute ne veulent pas avoir à cliquer visuellement par un éditeur MSI pour y arriver.


Puis-je faire avec un événement post-build Javascript qui utilise le la classe de WindowsInstaller.Installer? Aaron Stebner a publié un script qui ajoute un « lancement l'application après l'installation? » dialogue à un MSI produit par Visual Studio. Windows Installer prend en charge une capacité « app lancement », mais il est pas exposé dans les concepteurs pour VS2008 / 2005. Un script biolerplate rapide, exécutez comme une étape de post-construction dans VS, a ajouté dans la boîte de dialogue de lancement.

est quelque chose de similaire possible avec l'ordre des actions personnalisées?

Était-ce utile?

La solution

Quelques réponses pour moi:

  • Oui, il est possible de le faire avec une étape de Postbuild mis en œuvre en Javascript.
  • Oui, j'utiliser la classe WindowsInstaller.Installer.
  • oui, orque était nécessaire pour comprendre tout

Orca montre clairement l'action personnalisée qui vise à restaurer les valeurs de registre fonctionne avant que l'action intégrée qui supprime les valeurs de registre.

Je dois donc écrire un script pour changer le 1698-2620, et les valeurs de registre doit plus être rétablie correctement.


Modifier : pas si vite. L'idée est bonne, mais ce n'est pas aussi simple que de changer le numéro de séquence. Le problème est, la valeur de Registre « préservée » est dans l'arborescence de Registre qui est supprimé par le programme de désinstallation. Par conséquent, ni l'ordre fonctionne. Si A est la restauration, et B est la suppression, A-B restaureront le registre seulement pour avoir la valeur restaurée plus tard supprimé. B-A supprimera la première valeur, puis A aura pas de valeur à restaurer. La raison en est que A (la restauration partie) stocke la valeur à être restaurée dans l'arbre qui est à supprimer.

Ainsi, le fonctionnement doit être quelque chose comme A-B-A, where A prend la valeur-être à restaurer stocké, et il met dans un endroit qui ne sera pas supprimé par B. Ensuite B supprime les touches spécifiques aux applications et valeurs le registre. A restaure le paramètre qui a été socked loin par A`.

Pour tout cela se que je devais faire une intervention chirurgicale sur le fichier MSI, parce que le concepteur MSI vanille dans Visual Studio ne permet pas d'établir des numéros de séquence spécifiques. Vous devez utiliser Orca, qui est un outil graphique, ou, dans mon cas je l'interface COM au WindowsInstaller pour automatiser les changements via javascript.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top