Подтвердить что ты не робот

WiX не добавит настройки реестра HKLM во время установки Windows 7

Я написал установщик WiX, который отлично работает с Windows XP, но при установке в Windows 7 я столкнулся с трудностями с регистрационными записями. Мне нужно добавить запись HKLM, а также запись в реестре для программы, отображаемую в меню "Пуск". Вот код, который я использую для обоих типов записей:

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

Как я могу исправить эту проблему?

С другой стороны, права на реестр одинаковы на компьютерах с Windows XP и Windows 7.

4b9b3361

Ответ 1

Я выяснил, почему это происходит.

С установкой WiX, скомпилированной на платформе x86, Windows 7 выбрала его как 32-разрядный установщик с 32-разрядными ключами реестра. Windows 7 64-разрядные обрабатывают 32-разрядные записи реестра, делая то, что я видел.

Программа все еще была зарегистрирована; это было просто не в 64-битной части реестра. Скомпилируйте его под платформой x64, внося необходимые изменения, чтобы сделать его для 64-битной системы (ProgramFileFolder станет ProgramFiles64Folder и т.д.), И это поместит вещи в нужное место.

Ответ 2

Спасибо, что в основном решили это для меня!

Я просто хотел добавить, что вам необязательно менять все на x64, чтобы это работало, только соответствующий компонент должен быть помечен как 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>

Обратите внимание на Win64 = "yes" , это все, что требуется для записи в 64-разрядную область реестра. Условие VersionNT64 существует, поэтому этот компонент будет установлен только в системе x64.

В моем случае это дает предупреждения ICE80, потому что я хочу установить 64-битный компонент в 32-разрядный ProgramFilesFolder. Я с удовольствием проигнорирую их, потому что, поскольку мое основное приложение не x64, только расширение оболочки, и я не хочу помещать расширение оболочки в свою собственную специальную папку.

Ответ 3

Существуют некоторые отличия от того, как Windows 7 обрабатывает определенные ключи реестра. Отражение реестра было удалено, начиная с Windows 7. Я не уверен, что это играет в то, что вы видите здесь, но посмотрите эту ссылку, чтобы узнать больше об этом.

Кроме того, если вы работаете с 64-разрядной версией Windows 7, вы можете вникнуть в некоторые особенности, обратившись к MSDN 64-разрядное руководство по программированию Windows.

Кроме того, если вам нужно иметь разные ключи реестра, установленные в разных местах в зависимости от вкуса Windows (XP, Vista, 7 и т.д.), тогда этот вопрос стека переполнения также имеет ответ для вас.