Question

J'ai écrit un installateur WIX qui fonctionne parfaitement avec Windows XP, mais lors de l'installation dans une boîte Windows 7, je rencontre des difficultés avec les entrées de registre. J'ai besoin d'ajouter une entrée HKLM ainsi que l'entrée de registre pour le programme à afficher dans le menu Démarrer. Voici le code que j'utilise pour les deux types d'entrée:

<!-- Create the registry entries for the program -->
<DirectoryRef Id="TARGETDIR">
  <Component Id="RegistryEntriesInst" Guid="...">
    <RegistryKey Root="HKLM"
                 Key="Software\$(var.Manufacturer)\$(var.ProductName)"
          Action="createAndRemoveOnUninstall">
      <RegistryValue
          Type="string"
          Name="installed"
          Value="true"
          KeyPath="yes"/>
    </RegistryKey>
  </Component>
  <Component Id="RegistryEntriesVer" Guid="...">
    <RegistryKey Root="HKLM"
                 Key="Software\$(var.Manufacturer)\$(var.ProductName)"
          Action="createAndRemoveOnUninstall">
      <RegistryValue
          Type="string"
          Name="version"
          Value="$(var.ProductVersion)"
          KeyPath="yes"/>
    </RegistryKey>
  </Component>
</DirectoryRef>

<!-- To add shortcuts to the start menu to run and uninstall the program -->
<DirectoryRef Id="ApplicationProgramsFolder">
  <Component Id="ApplicationShortcut" Guid="...">
    <Shortcut Id="ApplicationStartMenuShortcut"
              Name="$(var.ProductName)"
              Description="..."
              Target="[SERVERLOCATION]$(var.Project.TargetFileName)"
              WorkingDirectory="SERVERLOCATION"/>
    <Shortcut Id="UninstallProduct"
                  Name="Uninstall $(var.ProductName)"
                  Description="..."
                  Target="[System64Folder]msiexec.exe"
                  Arguments="/x [ProductCode]"/>
    <RemoveFolder Id="SERVERLOCATION" On="uninstall"/>
    <RegistryValue
        Root="HKCU"
        Key="Software\$(var.Manufacturer)\$(var.ProductName)"
        Name="installed"
        Type="integer"
        Value="1"
        KeyPath="yes"/>
    </Component>
</DirectoryRef>

Comment puis-je résoudre ce problème?

D'un autre côté, les autorisations de registre sont les mêmes sur les ordinateurs Windows XP et Windows 7.

Était-ce utile?

La solution

J'ai compris pourquoi cela se produit.

Avec l'installateur WIX compilé sur une plate-forme x86, Windows 7 l'a ramassé sous le nom d'installateur 32 bits avec des touches de registre 32 bits. Windows 7 64 bits gère les entrées de registre 32 bits en faisant exactement ce que j'ai vu.

Le programme était toujours enregistré; Ce n'était tout simplement pas dans la partie 64 bits du registre. Compilez-le sous une plate-forme X64 tout en apportant les modifications nécessaires pour le faire pour un système 64 bits (ProgramFileFolder deviendra ProgramFiles64 Folder, etc.), et il mettra les choses au bon endroit.

Autres conseils

Merci de résoudre essentiellement celui-ci pour moi!

Je voulais juste ajouter que vous n'avez pas nécessairement besoin de tout changer pour être x64 pour que cela fonctionne, seul le composant en question doit être marqué comme x64.

<Component Id="MyShellExtension64.dll" Guid="..." Win64="yes">
  <Condition>VersionNT64</Condition>
  <File
    Name="MyShellExtension64.dll"
    Source="MyShellExtension64.dll"
    KeyPath="yes"/>
  <RegistryValue
    Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
    Name="{GUID}" Value="My Shell Extension" Type="string"/>
</Component>

Noter la Win64 = "Oui", c'est tout ce qui est nécessaire pour écrire dans la zone 64 bits du registre. La condition Versionnt64 est là pour que ce composant ne soit installé que sur un système X64.

Dans mon cas, cela donne des avertissements ICE80 car je souhaite installer un composant 64 bits dans le programme de programme 32 bits. Je suis heureux de les ignorer parce que parce que mon application principale n'est pas X64, seule l'extension Shell est, et je ne veux pas mettre l'extension Shell dans son propre dossier spécial.

Il existe des différences dans la façon dont Windows 7 gère certaines clés de registre. La réflexion du registre a été supprimée à partir de Windows 7. Je ne sais pas si cela joue dans ce que vous voyez ici, mais consultez ce lien Pour en savoir plus à ce sujet.

De plus, si vous travaillez avec une version 64 bits de Windows 7, vous pourrez peut-être creuser dans certains détails en faisant référence au Guide de programmation Windows 64 bits MSDN.

De plus, si vous avez besoin de l'installation de clés de registre différentes dans différents emplacements en fonction de la saveur Windows (XP, Vista, 7, etc.) Cette question de débordement de pile a également une réponse pour vous.

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