WiX - 在两个不同的位置安装相同的文件

时间:2015-12-07 09:39:44

标签: wix windows-installer

在我的安装程序中,我有两个可选功能,即同一软件的版本5和6的插件。他们将相同的文件(同名,相同的二进制内容)安装到应用程序的“plugins”文件夹中。

但我有以下错误:

  

C:\ Users \ FooBar \ Documents \ project \ project.wxs(281):错误   LGHT0204:ICE30:目标文件'0egx-0x3.dll | appv5plugin.dll'是   通过两个不同的组件安装在'[TARGETDIR] \ plugins \'中   LFN系统:'Comp_ThisAppV5_plugin'和   'Comp_ThisAppV6_plugin'。这会打破组件引用计数。

我试过了:

  • 使用相同的文件,components同时将其用作Source
  • 将文件复制到两个项目子文件夹中,每个子文件夹对应一个component

但是,静止,WiX拒绝建立。

wxs文件详细信息:

  • 在注册表中搜索TheApp v5和v6的安装目录:

    <Property Id="PROP_APPV5PATH">
        <RegistrySearch Id='RegSearch_AppV5Path' Type='raw' Root='HKLM' Key='SOFTWARE\TheCompany\TheApp\5.0' Name='Installdir' Win64="yes"/>
    </Property>
    <Property Id="PROP_APPV6PATH">
        <RegistrySearch Id='RegSearch_3AppV6Path' Type='raw' Root='HKLM' Key='SOFTWARE\TheCompany\TheApp\6.0' Name='Installdir' Win64="yes"/>
    </Property>
    
  • 单独的组件:

    <Directory Id="DIR_APPV5">
        <Directory Id="Dir_AppV5Plugins" Name="plugins">
            <Component Id="Comp_ThisAppV5_plugin" Guid="*">
                <File Id="appv5plugin_dll" Source="files\plugins\appv5\app_plugin.dll" KeyPath="yes"/>
            </Component>
        </Directory>
    </Directory>
    
    <Directory Id="DIR_APPV6">
        <Directory Id="Dir_AppV6Plugins" Name="plugins">
            <Component Id="Comp_ThisAppV6_plugin" Guid="*">
                <File Id="appv6plugin_dll" Source="files\plugins\appv6\app_plugin.dll" KeyPath="yes"/>
            </Component>
        </Directory>
    </Directory>
    
  • 两个安装目录:

    <SetDirectory Id="DIR_APPV5" Value="[PROP_APPV5PATH]" /> 
    <SetDirectory Id="DIR_APPV6" Value="[PROP_APPV6PATH]" /> 
    
  • 两个独立的功能

    <Feature Id="Feat_ThisAppV5_plugin" Title="Plugin for App V5" ConfigurableDirectory="DIR_APPV5" Level="1000" AllowAdvertise='no' InstallDefault='local' Absent='allow'>
        <ComponentRef Id="Comp_ThisAppV5_plugin"/>
    </Feature>
    <Feature Id="Feat_ThisAppV6_plugin" Title="Plugin for App V6" ConfigurableDirectory="DIR_APPV6" Level="1000" AllowAdvertise='no' InstallDefault='local' Absent='allow'>
        <ComponentRef Id="Comp_ThisAppV6_plugin"/>
    </Feature>
    

2 个答案:

答案 0 :(得分:1)

在为所有组件提供唯一的GUID并为每个文件提供唯一的Id和ShortName之后,我仍然遇到所有这些错误。我通过抑制ICE30的ICE验证来“修复”它。我还没有测试过,所以我不知道在为多个版本的应用程序安装和卸载我的插件时它是否能正常工作......

注意:忽略ICE错误的设置可在“工具设置”选项卡下的“项目属性”中找到。

答案 1 :(得分:0)

尝试为每个文件提供一个显式的ShortName值(显然是唯一且不同的)。我不完全确定,但问题可能是短文件名的冲突。 MSI文件中File表中每个值的值是多少?