Wix - ICE60 and ICE69 warnings

Either of these below tools will allow you to edit a .ttf file and add the information you need.

http://fontforge.org/editexample.html

http://sourceforge.net/projects/ttfedit/

In regards the mismatched component reference, the ICE error you're getting can be safely ignored. If you would prefer to get rid of it, you can advertise your shortcuts instead.

https://docs.microsoft.com/en-us/archive/blogs/alexshev/from-msi-to-wix-part-10-shortcuts

Otherwise, you can suppress that validation error.


With regards to the ICE69 warning, I thought I'd offer a more comprehensive discussion on that, having just been through this myself…


From the MSDN documentation for ICE69:

Problems with cross-component referencing arise from the way formatted strings are evaluated. If the component referenced with the [$componentkey] property is already installed and is not being changed during the current installation (for example, being reinstalled, moved to source, and so forth), the expression [$componentkey] evaluates to null, because the action state of the component in [$componentkey] is null. Similar problems can occur during upgrade and repair operations.

The documentation goes on to explain that when the reference is across components in different features, the message is an error, as the defining feature may not be installed while the referencing feature is, resulting in a null value for the string.

When the two components are in the same feature, presumably since one is only ever installed with the other, the string can be safely used. So you get a warning, indicating you're doing something potentially unsafe but which likely would work.

There are a number of ways to address this, including:

  • Sledge-hammer: just disable the warning. Open the properties for your WiX project, select the "Tool Settings" tab, and enter "ICE69" in the "Suppress specific ICE validation:" field:

enter image description here

  • Practical: through a quirk in the way that formatting strings are interpreted, you can use the syntax [!...] instead of [#...] and fool the compiler into ignoring the issue. From the MSI documentation:

If a substring of the form [!filekey] is found, it is replaced by the full short path of the file, with the value filekey used as a key into the File table. This syntax is valid only when used in the Value column of the Registry or the IniFile tables. When used in other columns this syntax is treated the same as [#filekey] .

In other words, by using the [!...] syntax in a scenario in which that syntax is not actually used, the compiler doesn't do the analysis to handle the warning for the [#...] syntax, but ultimately MSI still treats it as that syntax. You've effectively hidden that formatting string from the compiler.

  • Theoretical ideal: use advertised shortcuts, per e.g. the blog article referenced by your other answer. Obviously, this only works when the warning is generated by a reference in a shortcut. :) And of course, using advertised shortcuts introduces other complexities. But it is an option and will get rid of the warning (since you're not even using the Target attribute in that case, and have no formatted string).

Tags:

Xml

Wix