问题
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 asSource
- 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>
回答1:
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.
回答2:
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?
来源:https://stackoverflow.com/questions/34130417/wix-install-the-same-file-at-two-different-locations