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