Question

I have a permachine MSI installer that I'm converting to a per user installer that is installing files to the LocalAppDataFolder.

To get rid of ICE38 warnings I added a registry as the keypath. The problem is in one of my components I have a advertised shortcut and ProgId.

I'm now getting:

  • ICE19 - 'settings' advertises component: 'CMP_Rapid'. This component cannot be advertised because the KeyPath type disallows it
  • ICE19 - Shortcut: 'SHC_RunConfigExe' advertises component: 'CMP_Rapid'. This component cannot be advertised because the KeyPath type disallows it.
  • ICE50 - Component 'CMP_Rapid' has an advertised shortcut, but the KeyPath cannot be found.

Is there anyway to advertise in per user installs when installing to the LocalAppDataFolder? I'm not that familiar with advertising. On the shortcut I use it because I like the repair functionality it offers. On the progId I use it because it automatically updates the appropriate icons after an install.

I need to install this on XP and Vista so I can use the Windows 7 solution: ProgramFilesFolder redirection.

Below is the component that generates the errors:

<DirectoryRef Id="INSTALL_FOLDER">
      <Component Id="CMP_Rapid"
                 Guid="{9373A11C-5A3C-49E3-963D-C19B765A4285}">

        <File Id="FILE_Rapid"
              Source="$(var.FilePath)\Dynagen Configurator.exe">
        </File>

        <Shortcut Id="SHC_RunConfigExe"
                Name="DYNAGEN Configurator"
                Description="Opens DYNAGEN Configurator application." 
                Directory="ConfigShortCutDir"
                WorkingDirectory="INSTALL_FOLDER"
                Icon="ICO_RunConfigExe.exe"
                Advertise="yes"/>

        <ProgId Id="Rapid.drcS" Icon="ICO_drcS.ico" Advertise="yes">
          <Extension Id="settings">
            <Verb Id="Open" Command="Open" Argument="/so &quot;%1&quot;" />
            <Verb Id="Edit" Command="Edit" Argument="/edit &quot;%1&quot;"/>
            <Verb Id="Program" Command="Program" Argument="/program &quot;%1&quot;"/> 
          </Extension>
        </ProgId>

        <RegistryValue Root="HKCU"
                       Key="Software\Dynagen\DynagenConfigurator"
                       Name="CMP_Rapid"
                       Type="integer"
                       Value="1"
                       KeyPath="yes"
                       />

      </Component>
    </DirectoryRef>
Was it helpful?

Solution

Turns out satisfying ICE38 by making a registry key the keypath is wrong. The proper thing to do is to ignore the ICE38 error but going going into the wix properties page and add ICE38 and ICE91 beside "Suppress specific ICE validation.

Microsoft or Wix doesn't have ideal support for pure per-user installs. I couldn't even find any good examples online.

Bryan at WiX-users@lists.sourceforge.net helped me out on this:

Since that is the case, ICE38 is (in my opinion) incorrect and you will want to ignore it. ICE38 implies you are installing per-user resources in the context of a per-machine installation but never verifies that this is so.

Actually authoring a per-user install requires that you ignore ICE38 because it won't ever be accurate for that world.

Once I ignored that the above worked.

[Edit]

See my answer here as well. Turns out there is some edge cases you need to be aware of.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top