WiX n'ajoutera pas de paramètre de Registre HKLM pendant L'installation de Windows 7

j'ai écrit un installateur WiX qui fonctionne parfaitement avec Windows XP, mais lors de l'installation dans une boîte Windows 7 je suis en difficulté avec les entrées de registre. J'ai besoin d'ajouter un HKLM entrée 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?

sur une note latérale, les permissions du Registre sont les mêmes que sous Windows XP et Windows 7 Ordinateurs.

32
demandé sur Peter Mortensen 2009-12-10 19:04:40

3 réponses

j'ai compris pourquoi cela arrive.

avec L'installateur WiX compilé sur une plate-forme x86, Windows 7 l'a pris comme l'installateur 32 bits avec des clés de registre 32 bits. Windows 7 64-bit gère les entrées de registre 32-bit en faisant exactement ce que j'ai vu se produire.

le programme était toujours enregistré; il n'était tout simplement pas dans la partie 64 bits du registre. Compiler sous une plate-forme x64, tout en apportant les changements nécessaires à faire pour un système 64-bit (ProgramFileFolder deviennent ProgramFiles64Folder,etc.), et il mettra les choses au bon endroit.

31
répondu Scott Boettger 2016-12-20 21:55:45

merci de résoudre ce problème 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>

Notez le Win64=" yes " , c'est tout ce qui est requis pour écrire dans la zone 64 bits du registre. La condition VersionNT64 est là de sorte que ce composant ne sera installé que sur un système x64.

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

17
répondu Jacob Stanley 2010-04-05 07:33:31

il y a quelques différences dans la façon dont Windows 7 traite certaines clés de registre. Les reflets du registre ont été supprimés à partir de Windows 7. Je ne suis pas sûr que cela joue dans ce que vous voyez ici, mais regardez ce lien pour plus sur cela.

aussi, si vous travaillez avec une version 64-bit de Windows 7, vous pourriez être en mesure de creuser dans quelques détails en se référant au MSDN 64-bit Windows Programming Guide .

en outre, si vous avez besoin d'avoir différentes clés de registre installées dans des endroits différents selon la saveur de Windows (XP, Vista, 7, etc.) puis cette question de débordement de pile a aussi une réponse pour vous.

5
répondu Mat Nadrofsky 2017-05-23 12:26:10