2013-06-25 38 views
1

我越來越從light.exe試圖VS2010中使用合併模塊在我的WiX安裝項目時,我發現了以下警告很委屈:這是什麼使MSI目錄「32位」或「64位」?

ICE80: This 64BitComponent F_AdaptersInGac.5AE08CC6_EB8E_4F10_AB7B_CEFD0CB0F832 
     uses 32BitDirectory GAC.5AE08CC6_EB8E_4F10_AB7B_CEFD0CB0F832 

(重複在每個文件合併模塊)。

合併模塊和產品WiX文件都是同一個VS2010解決方案的一部分。合併模塊和產品都包含指定Platform =「x64」的<Package>元素。在合併模塊.wxs文件中的片段看起來是這樣的:

<Package Id="{5AE08CC6-EB8E-4F10-AB7B-CEFD0CB0F832}" InstallerVersion="200" Languages="1033" Manufacturer="Yoyodyne Propulsion Systems" Platform="x64" /> 
<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFiles64Folder"> 

    <!-- Assemblies that go in the GAC --> 
    <Directory Id="GAC" SourceName="GAC"> 
     <Component Id="C_AdaptersInGac" Guid="{C1C7D6F8-197D-874E-79B9-EBFEBDDCB65A}" Win64="yes"> 
     <File Id="F_AdaptersInGac" Name="ERPLink.Adapters.SharePoint.dll" KeyPath="yes" Assembly=".net" Source="..\Internal\Adapters\Release\Contoso.Adapters.dll" /> 
     </Component> 
    </Directory> 
    </Directory> 
</Directory> 

因爲我甚至把我的構成要素進行ProgramFiles64Folder目錄裏面,我也標誌着平臺「64」,爲什麼我得到這個錯誤?其他地方在WiX包文件中控制目錄的64位?

回答

0

合併模塊應該有一個抽象,比如MergeRedirectFolder,這樣當你在安裝程序中使用它們時,你可以使用Directory和Merge元素將MergeRedirectFolder與實際的[ProgramFiles] Company \ Product目標相關聯。

此外,如果這些文件是爲了進入GAC,有一個名爲GlobalAssemblyCache的特殊文件夾標識符可以實現此目的。

以下只是爲我工作:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <?define ComponentRules="OneToOne"?> 
    <!-- SourceDir instructs IsWiX the location of the directory that contains files for this merge module --> 
    <?define SourceDir="..\Deploy"?> 
    <Module Id="StrongNameMM" Language="1033" Version="1.0.0.0"> 
    <Package Id="0085d1f6-e7cf-413e-ae3c-cd1a1e0afb1b" Manufacturer="StrongNameMM" InstallerVersion="200" Platform="x64" /> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="MergeRedirectFolder"> 
     <Component Id="owc457F6083DF7B557CCA84E132209AC321" Guid="9ab7d95e-7841-3ff9-ffac-87a6b7633636" Win64="yes"> 
      <File Id="owf457F6083DF7B557CCA84E132209AC321" Source="$(var.SourceDir)\ClassLibrary1.dll" KeyPath="yes" Assembly=".net"/> 
     </Component> 
     </Directory> 
    </Directory> 
    </Module> 
</Wix> 

然後在主安裝程序:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 

    <FeatureGroup Id="features"> 
     <Feature Id="StrongName" Title="StrongName" Description="Installs all the files needed for StrongName" Level="1" AllowAdvertise="no" ConfigurableDirectory="INSTALLLOCATION"> 
     <MergeRef Id="StrongNameMM"/> 
     </Feature> 
    </FeatureGroup> 

    <!-- Content --> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFiles64Folder"> 
     <Directory Id="CompanyFolder" Name="My Company"> 
      <Directory Id="INSTALLLOCATION" Name="StrongName"> 
      <Merge Id="StrongNameMM" SourceFile="$(var.StrongNameMM.TargetPath)" DiskId="1" Language="1033"/> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 

    </Fragment> 
</Wix> 

最後:

<Package InstallerVersion="301" Compressed="yes" InstallScope="perMachine" Platform="x64" /> 
+0

感謝您的回覆。令我困惑的是,我想要在合併模塊中添加的文件在GAC中,並且afaik不是由特殊文件夾標識符表示的,而是通過在File元素上指定屬性Assembly =「。net」來表示的。我嘗試將組件移出到TARGETDIR目錄,並將相同的錯誤信息作爲結果。 –

+0

對不起,你是對的。自從我在GAC中安裝了一些內容後,我忘記了[GlobalAssemblyCache]只是InstallShield的一件事。 –

+0

我剛剛更新了我的答案,爲我工作。 –

相關問題