Qu'est-ce que l'attribut wix 'KeyPath'?

125

Qu'est-ce que l' attribut Wix ' KeyPath '? En particulier, comment s'applique-t-il aux éléments suivants:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>
Seth
la source
112
OMG la documentation Wix est totalement inutile. Le document wix dit, pour l'attribut KeyPath, que si vous le définissez sur "Oui", le fichier est alors traité comme le chemin d'accès clé du composant. Soooo utile !!
Cheeso
5
@RobMensching - appréciez votre esprit et votre volonté de contribuer à la communauté. Me dire comment NE PAS se plaindre n'est pas aussi bon que de me dire (et aux autres) comment se plaindre. Si je connaissais l'endroit pour soulever un bug, il y a 2 ans, je l'aurais fait. De plus, comme vous pouvez le voir par les votes positifs, apparemment d'autres personnes ressentent la même chose. Il est peut-être temps pour ce genre de message: "Aidez à améliorer WiX! Veuillez signaler les bogues appropriés en cliquant ICI ".
Cheeso
21
Va faire, @Cheeso! Veuillez signaler les
Rob Mensching
8
@Cheeso Le concept clé à comprendre est qu'un projet de configuration WiX crée un package Windows Installer. Les documents WiX ne dupliquent pas (et ne devraient généralement pas) dupliquer les documents Windows Installer. Bien que vous puissiez souvent utiliser une construction WiX sans comprendre les tables Windows Installer qu'elle prend en charge, si vous avez des questions, vous devriez consulter la documentation sur MSDN. Pour les composants, commencez ici .
Tom Blodget
30
@TomBlodget: Je dirais que WiX DEVRAIT dupliquer les documents Windows Installer. Pour la plupart des utilisateurs, la division WiX / Windows Installer ne fait que semer la confusion, et plus ce qui peut être caché à l'utilisateur final est facile à utiliser dans l'ensemble de l'outil.
Scott Stafford

Réponses:

122

Comme l' explique Rob Mensching :

Le KeyPath d'un composant est une ressource unique que Windows Installer utilise pour déterminer si un composant «existe» sur une machine.

Cela signifie que lorsque Windows Installer décide d'installer votre composant, il vérifie d'abord si la ressource keypath est déjà présente. Si tel est le cas, aucune des ressources du composant n'est installée.

La présence de la ressource keypath détermine également si un composant a été endommagé ou a disparu lorsque vous "réparez" un MSI.

Lorsque la ressource de chemin d'accès est un fichier versionné, Windows Installer ne le considérera comme existant que s'il trouve un fichier avec une version égale ou supérieure.

Dans votre exemple spécifique, vous avez un composant qui supprime un dossier lors de la désinstallation. Ce composant ne sera installé que si la clé de registre donnée n'existe pas encore. L'ajout d'une clé de registre à utiliser comme chemin d'accès clé est une astuce courante lorsque vous avez besoin d'un chemin d'accès clé pour un composant qui installe des ressources qui ne peuvent pas être utilisées comme chemin d'accès elles-mêmes, comme un raccourci .

Wim Coenen
la source
4
Alors, quel est l'intérêt de donner explicitement au seul fichier d'un composant un attribut keypath = "no"?
Christopher B.Adkins
4
@Adkins: cela supprimerait le comportement par défaut de wix pour prendre ce fichier comme chemin d'accès. Par conséquent, aucun chemin d'accès n'est écrit dans la base de données du programme d'installation pour ce composant. Lors de l'installation, le programme d'installation de Windows utilisera alors le dossier de destination du composant comme chemin d'accès. Une autre façon d'obtenir ce comportement consiste à définir "keypath = yes" sur l'élément de composant lui-même. En tout cas, cela ne me semble pas une bonne idée.
Wim Coenen