Question

J'utilise WiX 3.6 pour créer un programme d'installation.

L'un des besoins est d'écrire l'emplacement de l'emplacement d'installation au registre dans les deux HKCU ou HKLM selon la propriété ALLUSERS.

basé sur la recherche que je l'ai fait, je pense que ce qui suit devrait travailler

<RegistryKey Root="HKMU" 
             Key="Software\OpenCover" 
             Action="createAndRemoveOnUninstall">
  <RegistryValue  Name="Location" 
                  Type="string" 
                  Value="[APPLICATIONFOLDER]" 
                  Action="write" 
                  KeyPath="yes" />
</RegistryKey>

Le problème est qu'il ne fonctionne que lorsque ALLUSERS = "" à savoir HKMU est interprété comme HKCU.

Si je tente une installation perMachine où ALLUSERS = 1 alors l'entrée n'est pas écrit HKLM comme prévu, mais quand je regarde le fichier journal d'installation, je vois l'appel à WriteRegistryValues.

MSI (s) (D4:14) [22:46:24:901]: Executing op: ActionStart(Name=WriteRegistryValues,Description=Writing system registry values,Template=Key: [1], Name: [2], Value: [3])
Action 22:46:24: WriteRegistryValues. Writing system registry values
MSI (s) (D4:14) [22:46:24:902]: Executing op: ProgressTotal(Total=2,Type=1,ByteEquivalent=13200)
MSI (s) (D4:14) [22:46:24:903]: Executing op: RegOpenKey(Root=-1,Key=Software\OpenCover,,BinaryType=0,,)
MSI (s) (D4:14) [22:46:24:903]: Executing op: RegAddValue(Name=ConsoleLocation,Value=C:\Program Files (x86)\OpenCover\,)
WriteRegistryValues: Key: \Software\OpenCover, Name: ConsoleLocation, Value: C:\Program Files (x86)\OpenCover\
MSI (s) (D4:14) [22:46:24:906]: Executing op: RegCreateKey()
WriteRegistryValues: Key: \Software\OpenCover, Name: , Value: 

Quelqu'un peut-il expliquer comment réaliser la tâche que je dois complète

Était-ce utile?

La solution

Le problème est en fait à voir avec un installateur 32 bits sur une plate-forme 64 bits.

Quand ALLUSERS = « 1 » est utilisé dans ce scénario, puis les entrées de registre, marquées avec HKMU, sont effectivement écrits, mais sous dans ce cas, HKLM \ Software \ Wow6432Node \ OpenCover. I entrées suspectes marquées comme HKLM sont redirigés de la même manière.

Malheureusement, la documentation sur action WriteRegistryValues ?? n'explique pas le bit 32/64 de redirection « magique » et les informations, les détails concernant l'entrée de registre réelle, ne figure pas dans les journaux.

Pour obtenir un aperçu de ce qui se passe alors l'article suivant démystifie le comportement observé Clés de Registre touchés par WOW64 . De cet article, nous pouvons voir que le programme d'installation « pense » qu'il est en train d'écrire dans un dossier HKLM \ Software, mais cela est en fait « redirigés » à HKLM \ Wow6432Node \ Software pour un processus 32 bits sur 64 plate-forme de bits et explique donc pourquoi il ne se reflète pas dans les fichiers journaux. L'article explique également pourquoi, lorsque ALLUSERS = « » et HKMU est alors HKCU pourquoi les entrées apparaissent là où on les attendre à être, parce que ces entrées sont « partagé » entre 32 et 64 bit applications.

Autres conseils

Je suppose que votre installateur n'est pas ÉLÉVATEURS (UAC activé?) Et que l'écriture à HKLM est redirigé vers HKCU.

BTW, vous pouvez également envisager d'utiliser l'API Windows Installer depuis votre application pour interroger le UpgradeCode, ProductCode, InformationProduit (INSTALLLOCATION) sans qu'il soit nécessaire d'écrire une clé de registre pour stocker ces métadonnées.

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