InstallShield X
Each component can have a different destination location for its files. By default, an installation project's component's Destination property is the following:

According to Windows logo requirements, the default destination of your application's files must be a subfolder of the user's Program Files folder. If you use INSTALLDIR or ProgramFilesFolder as the parent folder for your feature's Destination property, your files will be installed to the correct location.

To change the component's destination folder, do the following:
The changes you make are reflected in the property sheet.
Setting the component's Remote Installation property to Favor Source (or to Optional when the component's feature is set to Favor Source) means that the component's files will not be installed on the target system, regardless of the component's Destination property.
Each feature also has a Destination property. If different, the component's Destination property overrides the feature's destination. The feature's Destination property is optional, but the component's is required.
The assumption behind using INSTALLDIR as the default Destination property for all of your features and components is that you want all of your application's files installed to the same root folder. This way, when an end user changes the destination folder for any of the features in the Custom Setup dialog, the destination folders for all of the features that are set to be installed to the path contained in INSTALLDIR also change.

If the component's destination is set to something other than INSTALLDIR, the components are installed to the destination specfied for each component and changing INSTALLDIR has no effect on the components' destinations.

An installer folder property such as INSTALLDIR specifies a default value. An end user can change this value by setting a property when launching Msiexec.exe at the command line or by selecting a new destination folder for a feature in the Custom Setup dialog.
If a component contains a .NET assembly, you can set the component's destination to [GlobalAssemblyCache]. When a .NET assembly is installed to a target system's Global Assembly Cache, the assembly can be accessed by other applications on the system.
In general, it is preferable to install assemblies to the local application directory. This increases application isolation.

In order to install an assembly to the Global Assembly Cache, the .NET Scan at Build component property must be set to either Properties Only or Dependencies and Properties.
See Also
Component Destination vs. Feature Destination