Fixing ICE43 Errors

The ICE43 validation verifies if non-advertised shortcuts installed in per-user locations are in components with a HKEY_CURRENT_USER registry entry as key member.

If this validation fails, the non-advertised shortcuts will be installed only for the first user that runs the package. This is because for the second user, Windows Installer will see the components of the shortcuts as installed and it will ignore them. However, if each component has a HKEY_CURRENT_USER registry entry as its key member, the second user cannot use the same entries (he would not have access to the HKCU registry hive of the first user). Therefore, the components will not be seen as installed and they will not be ignored by Windows Installer.

If your installation package has an ICE43 validation error, you can fix it in two ways:

  • use Advertised shortcuts
  • make sure that the key member of the component which contains the shortcut is a HKEY_CURRENT_USER registry entry

Advertised shortcuts

The main use of advertised shortcuts is explained in the Implement self-healing into the application How-To. However, advertised shortcuts can also be used to resolve an ICE43 validation error. Basically, by transforming all shortcuts into Advertised shortcuts the ICE43 validation will ignore them (it verifies only non-advertised shortcuts).

In order to set a shortcut as Advertised you can follow these steps:

HKEY_CURRENT_USER registry entry

Another solution which resolves an ICE43 validation error is to use HKEY_CURRENT_USER registry entries as the key members of the components which contain non-advertised shortcuts. By default a shortcut is added in the same component as its target. Therefore, this approach can be implemented in two ways:

  • add a registry entry to the component of the shortcut:
    • create your shortcut to an installed file
    • use the Registry page to create a registry entry(value) in the HKEY_CURRENT_USER registry hive
    • go to the Organization page
    • move the registry entry(value) in the component of the shortcut
    • set the registry entry(value) as the key member of the component
  • use an external shortcut:
    • create an external shortcut which points to your application
    • use the "Registry" page to create a registry entry(value) in the HKEY_CURRENT_USER registry hive
    • go to the "Organization" page
    • move the component of the shortcut in the component of the HKEY_CURRENT_USER registry entry(value)