WIX Installer - отличает 32-битную версию от 64-битной - PullRequest
4 голосов
/ 13 января 2012

Я новичок в wix, и мне нужно быстро исправить ...

Вот моя проблема, у меня есть установщик, который устанавливает и регистрирует некоторые DLL, но мы не хотим устанавливать вторую библиотеку DLL на 64-битной архитектуре.

Вот схема нашего установочного файла curent: ... ...

Я пытался добавить условие, как это

<Directory Id="INSTALLDIR" .....>
   <Component Id="IDDLL" Guid="20E4601C-D93C-4A86-A0D9-31145D5443E6">
       <File Id="common.dll" Name="common.DLL" ....  SelfRegCost="1"/>
       <File Id="for32bits.dll" Name="for32bits.DLL" ....  SelfRegCost="1"/>
       <Condition> %PROCESSOR_ARCHITECTURE="x86" </Condition>
   </Component>

   <Component Id="IDDLL" Guid="20E4601C-D93C-4A86-A0D9-31145D5443E6">
       <File Id="common.dll" Name="common.DLL" ....  SelfRegCost="1"/>
       <Condition> %PROCESSOR_ARCHITECTURE~="x86" </Condition>
   </Component>
</Directory>

Это не работает (ошибки дублирующихся символов)

Я также пытался использовать оператор if, но он выглядит обработанным во время компиляции, поэтому он тоже не работал:

<Directory Id="INSTALLDIR" .....>
   <Component Id="IDDLL" Guid="20E4601C-D93C-4A86-A0D9-31145D5443E6">
       <File Id="common.dll" Name="common.DLL" ....  SelfRegCost="1"/>
       <? if %PROCESSOR_ARCHITECTURE = "x86" ?> 
             <File Id="for32bits.dll" Name="for32bits.DLL" ....  SelfRegCost="1"/>
       <?endif?> 
   </Component>
</Directory>

Может кто-нибудь подсказать, как это сделать, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 27 сентября 2013

По моему опыту,% PROCESSOR_ARCHITECTURE ненадежен.Я использую VersionNT64 для последовательной обработки 32-разрядных и 64-разрядных.

В следующем примере выборочно устанавливается раздел реестра на основе локальной архитектуры:

<Component Id="RegistryAppPathsFoxit64" Guid="{FD5740AC-FE2C-4043-926B-DCE7422D77AE}">
  <Condition>VersionNT64</Condition>
  <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\FoxitReader.exe" Action="createAndRemoveOnUninstall">
    <RegistryValue Type="string" Value="C:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe" />
  </RegistryKey>
</Component>

<Component Id="RegistryAppPathsFoxit32" Guid="{7E78E125-CF56-46FC-BAF5-00B748052153}">
  <Condition>NOT VersionNT64</Condition>
  <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\FoxitReader.exe" Action="createAndRemoveOnUninstall">
    <RegistryValue Type="string" Value="C:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe" />
  </RegistryKey>
</Component>
4 голосов
/ 13 января 2012

Рассматривайте каждую архитектуру в своем собственном компоненте, каждый с уникальным GUID:

<Directory Id="INSTALLDIR" .....>
   <Component Id="IDDLL32" Guid="20E4601C-D93C-4A86-A0D9-31145D5443E6">
       <File Id="for32bits.dll" Name="for32bits.DLL" ....  SelfRegCost="1"/>
       <Condition> %PROCESSOR_ARCHITECTURE="x86" </Condition>
   </Component>

   <Component Id="IDDLL64" Guid="20E4601C-D93C-4A64-A0D9-31145D5443E6">
       <File Id="common.dll" Name="common.DLL" ....  SelfRegCost="1"/>
       <Condition> %PROCESSOR_ARCHITECTURE~="x86" </Condition>
   </Component>
</Directory>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...