Is it possible to have advertised shortcuts and ProgId for a per user MSI?
Asked Answered
V

1

4

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>
Vikkivikky answered 31/1, 2014 at 21:6 Comment(0)
V
2

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 [email protected] 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.

Vikkivikky answered 11/2, 2014 at 23:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.