Frage

Ich habe einen Wix -Installateur geschrieben, der perfekt mit Windows XP zusammenarbeitet, aber wenn ich in einem Windows 7 -Feld installiere, habe ich Schwierigkeiten mit Registrierungseinträgen. Ich muss einen HKLM -Eintrag sowie den Registrierungseintrag für das Programm im Startmenü angezeigt. Hier ist der Code, den ich für beide Eintragstypen verwende:

<!-- 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>

Wie kann ich dieses Problem beheben?

Nebenbei bemerkt, dass die Registrierungsberechtigungen auf den Computern Windows XP und Windows 7 gleich sind.

War es hilfreich?

Lösung

Ich habe herausgefunden, warum das passiert.

Mit dem Wix-Installationsprogramm wurde Windows 7 als 32-Bit-Installationsprogramm mit 32-Bit-Registrierungsschlüssel als 32-Bit-Installationsprogramm aufgenommen. Windows 7 64-Bit verarbeitet 32-Bit-Registrierungseinträge, indem sie genau das tun, was ich gesehen habe.

Das Programm war noch registriert; Es war einfach nicht im 64-Bit-Teil des Registers. Kompilieren Sie es unter einer X64-Plattform, während Sie die erforderlichen Änderungen vornehmen, um es für ein 64-Bit-System vorzunehmen (ProgramFileFolder werden ProgramFiles64Folder usw.), und es wird die Dinge an den richtigen Ort setzen.

Andere Tipps

Danke, dass du diese im Grunde genommen für mich gelöst hast!

Ich wollte nur hinzufügen, dass Sie nicht unbedingt alles ändern müssen, um X64 zu sein, damit dies funktioniert. Nur die betreffende Komponente muss als X64 gekennzeichnet werden.

<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>

Beachten Sie das Win64 = "Ja", Das ist alles, was erforderlich ist, um in den 64-Bit-Bereich der Registrierung zu schreiben. Die Versionnt64 -Bedingung ist vorhanden, damit diese Komponente nur in einem X64 -System installiert wird.

In meinem Fall gibt dies ICE80-Warnungen, da ich eine 64-Bit-Komponente im 32-Bit-ProgrammfilmsFolder installieren möchte. Ich freue mich, diese zu ignorieren, weil meine Hauptanwendung nicht X64 ist, nur die Shell -Erweiterung ist und ich die Shell -Erweiterung nicht in den eigenen Spezialordner einfügen möchte.

Es gibt einige Unterschiede darüber, wie Windows 7 bestimmte Registrierungsschlüssel umgeht. Die Reflexion des Registrierungsreflexion wurde ab Windows 7 entfernt dieser Link Für mehr dazu.

Wenn Sie mit einer 64-Bit-Version von Windows 7 arbeiten MSDN 64-Bit Windows-Programmierhandbuch.

Wenn Sie unterschiedliche Registrierungsschlüssel an verschiedenen Orten basierend auf dem Windows -Geschmack (XP, Vista, 7 usw.) installiert haben Dieser Stapelüberlauffrage Hat auch eine Antwort für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top