2012-01-13 136 views
4

我是新來威克斯和我有一個速戰速決做32位...WIX安裝程序 - 區分64位

這裏是我的問題,我有一個安裝並註冊一些DLL的安裝程序,但我們不希望在64位體系結構上安裝第二個DLL。

這是我們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> 

這確實不工作(重複符號錯誤)

我也tr滅蠅燈用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> 

能有人給我如何做到這一點,請線索?

回答

4

對待每一位建築在它自己的組件,每一個獨特的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> 
+0

謝謝,它的工作原理! – Traktopel 2012-01-20 20:21:39

4

我的經驗是%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> 
相關問題