Как установщики на основе WIX могут регистрировать COM для 32- и 64-разрядных ОС Windows? - PullRequest
5 голосов
/ 31 мая 2011

У меня есть долгоживущий установщик, который использует RegistryValue для настройки COM-сервера .Net.Установщик 32-битный.Я хотел бы, чтобы параметры реестра также были установлены для 64-битных ОС.Мои исследования показывают, что для этой цели мне нужен отдельный 64-битный установщик.Хорошо, как мне тогда иметь загрузчик, который обнаруживает ОС и вызывает правильный 32- или 64-битный MSI-файл?

Ответы [ 2 ]

10 голосов
/ 22 ноября 2011

У меня была такая же проблема с пользовательским расширением оболочки Windows, которое должно предоставлять 32-битную DLL для 32-битной Windows и 64-битную DLL для 64-битной Windows. Мой 32-разрядный MSI-файл будет записывать только записи реестра на узел WoW6432 в 64-разрядной системе, поэтому расширение оболочки не работает.

Решение (протестировано с wix-3.5.2519.0 на Win7 x86 и x64):

  1. Создайте два компонента, один из которых будет установлен только в 32-разрядной системе, а другой - только в 64-разрядной системе.
  2. Используйте элемент «Condition» внутри каждого компонента, чтобы проверить битность операционной системы. Я использовал Msix64, он также может работать с VersionNT64 ...
  3. Для 64-битного компонента должен быть установлен атрибут Win64 «да».
  4. К сожалению, это не будет работать успешно из коробки, потому что light.exe выдает ошибку (ошибка LGHT0204: ICE80: этот пакет содержит 64-битный компонент, но свойство сводки шаблона не содержит Intel64 или x64.):
  5. Решением является запуск light.exe с отключенной проверкой ICE80 (используйте параметр -sice: ICE80). Теперь файл MSI будет создан и может использоваться на обеих платформах.

Пример:

<Component Id="shellext_32.dll" DiskId="1" Guid="YOUR-GUID1">
    <!-- this will be installed only on a 32-bit System-->
    <Condition><![CDATA[NOT Msix64]]></Condition> 
    <!-- copy 32-bit Dll file...-->
    <File Id="blah blah... />

    <RegistryKey Id="MyShellIconOverlay" Root="HKLM"Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\MyIconOverlay" Action="createAndRemoveOnUninstall">
        <RegistryValue Type="string" Value="{GUID...}" />
    </RegistryKey>
</Component>

<Component Id="shellext_64.dll" DiskId="1" Guid="YOUR-GUID2" Win64="yes">
    <!-- this will be installed only on a 64-bit System-->
    <Condition><![CDATA[Msix64]]></Condition> 
    <!-- copy 64-bit Dll file...-->
    <File Id="blah blah... />

    <!-- the following Registry Key will NOT be created inside the WoW6432 
    <RegistryKey Id="MyShellIconOverlay64" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\MyIconOverlay64" Action="createAndRemoveOnUninstall">
        <RegistryValue Type="string" Value="{GUID...}" />
    </RegistryKey>
</Component>

Ссылки:

4 голосов
/ 01 июня 2011

Вы должны написать самозагрузчик самостоятельно.

WiX не поддерживает смешанные 32/64-битные пакеты, поскольку установщик Windows не поддерживает их.Однако некоторые коммерческие инструменты используют специальный загрузчик и 2 файла MSI для работы со смешанным установщиком.

...