4
votes

In my installer, I have two optional features, which are plugins for versions 5 and 6 of the same software. They install the same file (same name, same binary content) into the "plugins" folder of the applications.

But I have the following error:

C:\Users\FooBar\Documents\project\project.wxs(281) : error LGHT0204 : ICE30: The target file '0egx-0x3.dll|appv5plugin.dll' is installed in '[TARGETDIR]\plugins\' by two different components on an LFN system: 'Comp_ThisAppV5_plugin' and 'Comp_ThisAppV6_plugin'. This breaks component reference counting.

I have tried:

  • Using the same file, and both components use it as Source
  • Copying the file into two project subfolders, one for each component

But stills, WiX refuses to build.

wxs file details:

  • Install directories for TheApp v5 and v6 are searched for in the registry:

    <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>
    
  • Separate components:

    <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>
    
  • Two install directories:

    <SetDirectory Id="DIR_APPV5" Value="[PROP_APPV5PATH]" /> 
    <SetDirectory Id="DIR_APPV6" Value="[PROP_APPV6PATH]" /> 
    
  • Two separate features

    <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
The error message is saying that both components try to install the DLLs into the same directory, which is [TARGETDIR]\plugins. It means that RegistrySearch hasn't find anything and both properties ended up empty, and hence both directories got resolved to [TARGETDIR]\plugins, and thus it really attempts to install those components into the same folder. You might want to have some default values for those properties in case nothing is found in the registry (initial install). Besides, it references appv5plugin.dll, while the sources say the file names are different... Rebuild the MSI?Yan Sklyarenko
Why should RegistrySearch find anything at compile time??? I can understand that something fails at install time if both directories are the same, but there is absolutely no reason it happens at compile time.galinette
About the dll file name, that's a mistake. They are the same. Editedgalinette
Ah, right - sorry about the confusion, it's compile time.Yan Sklyarenko

2 Answers

1
votes

After giving all components unique GUIDs and every file a unique Id and ShortName, I was still getting all these errors. I "fixed" it by suppressing the ICE validation for ICE30. I haven't tested it yet, so I'm not whether it will work correctly when installing and uninstalling my plugin for multiple versions of the application...

Note: The setting to ignore ICE errors is found in the Project Properties under the Tool Settings tab.

0
votes

Try giving each file an explicit ShortName value (unique and different, obviously). I'm not completely sure, but the issue may be a collision of short file names. What are the values of each in the File table in the MSI file?