Thanks. That worked perfectly!

Blair wrote:
> If you are willing to suppress a couple of ICE tests during your build (I
> once imposed a rule that every MSI that my team had any responsibility for
> must have ALLUSERS set to 1 and no references to HKCU could exist in the
> Registry table) you can accomplish both items in your list by doing the
> following:
>
> <Directory Id="TARGETDIR" Name="SourceDir">
>   <Directory Id="ProgramFilesFolder">
>     <Directory Id="INSTALLDIR" Name="My Program" />
>   </Directory>
>   <Directory Id="ProgramMenuFolder">
>     <Directory Id="ProgramMenuDir" Name="My Program Suite" />
>   </Directory>
> </Directory>
>
> <Property Id="ALLUSERS" Value="1" />
> <Condition Message="Per-User installations are not supported">Installed OR
> ALLUSERS=1</Condition>
>
> <Feature ...>
>   <Component Id="MyExeComponent" Feature="ProductFeature"
> Directory="INSTALLDIR" Guid="*">
>     <File KeyPath="yes" Source="MyProgram.exe" />
>   </Component>
>
>   <Component Id="MyStartMenu" Feature="ProductFeature"
> Directory="ProgramMenuDir" KeyPath="yes"
> Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
>     <Condition>STARTMENU</Condition>
>     <CreateFolder />
>     <RemoveFolder Id="StartMenu" On="uninstall"/>
>     <Shortcut Id="StartMenu" WorkingDirectory="INSTALLDIR"
> Target="[INSTALLDIR]MyProgram.exe" Name="My Program" />
>   </Component>
> </Feature>
>
> Then, in your project settings (or your light.exe commandline, depending on
> your build system) you suppress ICE38 and ICE43.
>
> Here's the rational: Both ICE38 and ICE43 (along with a lot of others) make
> some (often invalid) assumptions. One of those assumptions is that any
> system-defined directory that COULD be in the user profile WILL BE in the
> user profile. This is because you can override the ALLUSERS setting from the
> Property table (including removing it) using the commandline and/or some
> custom action, and the ProgramMenuFolder directory CAN be in the user
> profile (when ALLUSERS isn't set [to 1]). ICE43 specifically tests
> components containing non-advertized shortcuts for HKCU keypaths (which is
> only a valid [IMHO] requirement when installing to a user's Start menu), and
> ICE38 looks at components that make use of (in various specific ways)
> subfolders of known folders that could be in the user profile.
>
> If you suppress these ICE tests, it is always a good idea to periodically
> review (using either smoke or orca, or some other validation tool) your MSIs
> making sure that there are not issues with other components relative to
> those ICE tests. Note that the WiX toolset routinely suppresses/ignores
> ICE33 and ICE66 (for various historical or other reasons).
>
> The code I illustrate is safe for per-machine installations (which is why
> the ICE tests can be ignored for the MyStartMenu component). If your code
> differs materially from my example, you will need to understand what your
> code is doing and what effects it will have under different
> situations/platforms/etc. You should also always prevent things you
> explicitly don't support (such as attempted per-user installations of
> per-machine packages) by blocking installation (such as testing for ALLUSERS
> being overridden as I have in the example code above).
>
> Blair
>
> -----Original Message-----
> From: Ivo Beltchev [mailto:i...@roadrunner.com] 
> Sent: Saturday, July 03, 2010 7:29 PM
> To: General discussion for Windows Installer XML toolset.
> Subject: [WiX-users] Question about Start Menu shortcuts
>
> Hi
>
> I have an installer with 2 features. Each feature has an EXE. I only 
> allow per-machine installation, and not per-user.
> I want to create a folder in All Users\Start Menu\Programs, which 
> contains shortcuts to both EXEs. I also want to make that folder 
> optional, with a property controlled by a checkbox in the CustomizeDlg.
>
> I am faced with 2 problems:
>
> 1) I added a Directory "ProgramMenuFolder", another Directory inside it 
> "ProgramMenuDir" and a Component with a RemoveFolder item (on 
> uninstall). I followed the instructions in the tutorial, with the 
> exception that I didn't copy the RegistryValue member of the Component. 
> Light is giving me an error "ProgramMenuDir installs to user profile. It 
> must use a registry key under HKCU as its KeyPath". But the thing is I 
> want to install to the global Programs menu, not the user-specific (my 
> ALLUSERS is set to 1). Why is it asking to write to HKCU? Maybe instead 
> of ProgramMenuFolder I should be using something like 
> CommonProgramMenuFolder?
> BTW, even if I add the HKCU key path, I get an error later in the 
> component that contains the shortcut: "ICE43: Component Blah has 
> non-advertised shortcuts.  It should use a registry key under HKCU as 
> its KeyPath, not a file.". So again with the registry key paths.
>
>
> 2) I want the shortcut to be installed only if certain property is set 
> (from the checkbox). I can do that by creating a separate component with 
> just the shortcut in it, and add a condition to the component. However 
> it looks like I can't have a component with just a shortcut. The 
> Shortcut element has no KeyPath property and I get an error about the 
> missing KeyPath. So how do I create a component with just a single 
> shortcut inside?
>
>
> Any ideas how to do what I need, and is it even possible?
>
> Thanks
> Ivo
>
>
> ----------------------------------------------------------------------------
> --
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>   

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to