[wix-users] WixVariable in a separate wxs

Russell Haley russ.haley at gmail.com
Thu Feb 1 08:39:46 PST 2018


On Wed, Jan 31, 2018 at 9:12 PM, Ven H via wix-users
<wix-users at lists.wixtoolset.org> wrote:
> Thank you Habib. But if I use a wxi file, I have to have this wxi file
> directly referred in the Product.wxs file and also the Wix variables like
> WixUIBannerBmp, WixUIDialogBmp and the Icon elements must be part of
> Product.wxs also. If I have to add another element in future, again, I may
> have to modify the Product.wxs. In my case, there is a lot of dynamism and
> separation required.
>
> In Edwin's approach, I just have to include a PropertyRef element in my
> Product.wxs and I can still have the above mentioned Wix variables and
> Icons in a separate wxs file and just add a dummy property in it which
> alone will be referenced in the Product.wxs file using a PropertyRef
> element.
>
> Regards,
> Venkatesh
>
> On Thu, Feb 1, 2018 at 10:18 AM, Habib Salim via wix-users <
> wix-users at lists.wixtoolset.org> wrote:
>
>> Use a wxi file.  like this:
>>
>>
>> ----------------------------------------------
>> <?xml version="1.0" encoding="utf-8"?>
>> <Include>
>>       <!--  courtesy of :
>> http://weblogs.sqlteam.com/mladenp/archive/2010/02/17/WiX-3-Tutorial-Under
>> standing-main-WXS-and-WXI-file.aspx
>>
>>       Versioning. These have to be changed for upgrades.
>>       It's not enough to just include newer files.  -->
>>   <?define MajorVersion="2" ?>
>>   <?define MinorVersion="0" ?>
>>   <?define BuildVersion="1" ?>
>>         <!-- Revision is NOT used by WiX in the upgrade procedure -->
>>   <?define Revision="658" ?>
>>         <!-- Full version number to display -->
>>   <?define
>> VersionNumber="$(var.MajorVersion).$(var.MinorVersion).$(var.BuildVersion)
>> .$(var.Revision)" ?>
>>
>>         <!--  Upgrade code HAS to be the same for all updates.
>>         Don't change it.Ever.  -->
>>   <?define UpgradeCode="your guid here"?>
>>
>>
>>         <!--  Path to the resources directory. resources don't really need
>> to be included
>>         in the project structure but I like to include them for for
>> clarity   -->
>>   <?define ResourcesDir="$(var.ProjectDir)\Resources" ?>
>>
>>       <!--  The name of our application exe file. This will be used to
>> kill the process when updating
>>         and creating the desktop shortcut  -->
>>   <?define ExeName="HSalimCo.WpfPivotViews.exe" ?>
>>   <?define ProductName = "PivotViews" ?>
>>   <?define ProductDescription ="PivotViews is a trademark of HSalim & Co.
>> Inc." ?>
>>   <?define CurrentVersion = !(bind.FileVersion.filWpfPivotViewsexe) ?>
>>   <?define ManufacturerName = "HSalim & Co. Inc"?>
>>   <?define HSalimCoFolder = "HSalimCo" ?>
>>   <?define IconPath = "$(sys.CURRENTDIR)Includes\PivotViews.ico"?>
>>   <?define PivotViewsJPEG = "PivotViews.jpg"?>
>>   <?define UiBackground = "$(sys.CURRENTDIR)Includes\WixUiDialog.jpg"?>
>>   <?define UiBanner = "$(sys.CURRENTDIR)Includes\WixUiBanner.jpg"?>
>>   <?define EulaFile = "$(sys.CURRENTDIR)Includes\PivotViewsEULA.rtf"?>
>>   <?define SuccessImage = "$(sys.CURRENTDIR)Includes\success.bmp"?>
>>   <?define ErrorImage =  "$(sys.CURRENTDIR)Includes\error.bmp"?>
>>   <?define SourceFilesDir= "<yourpathhere>\bin\x64\Release"?>
>>   <?define DXThemesDir="C:\Program Files (x86)\DevExpress
>> 17.2\Components\Bin\Framework\" ?>
>>   <?define InstallerActions="<CAprojectPath>\InstallerActions.CA.dll"?>
>>
>>
>> </Include>
>> ----------------------------------------------
>>
>>
>>
>>
>> -----Original Message-----
>> From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf
>> Of Ven H via wix-users
>> Sent: Wednesday, January 31, 2018 10:11 PM
>> To: Edwin Castro <egcastr at gmail.com>
>> Cc: Ven H <venh.123 at gmail.com>; WiX Toolset Users Mailing List
>> <wix-users at lists.wixtoolset.org>
>> Subject: Re: [wix-users] WixVariable in a separate wxs
>>
>> Thank you Edwin and Rob. In my case, I just need to maintain these
>> variables and the ones with images, logos and icons in a separate file. I
>> will have to generate this file dynamically by reading some configuration
>> file and populate the path for these images from that configuration file.
>> I don't want to modify Product.wxs programmatically for this. For example,
>> I want to have a separate file like ImageRefs.wxs,  which may have some
>> elements like below.
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
>> <Fragment>
>>     <WixVariable Id="WixUIBannerBmp" Value="Path_To_CustomBanner_Bmp" />
>>     <WixVariable Id="WixUIDialogBmp" Value=" Path_To_CustomDialog_Bmp " />
>>     <Icon Id="arpIcon.ico" SourceFile=" Path_To_CustomIcon "/> </Fragment>
>> </Wix>
>>
>> Even though the above compiles properly without any errors and the MSI
>> gets generated, the images / icons are not showing during installation. In
>> such a case, please advise what would be the best way.
>>
>>
>>
>>
>> Regards,
>> Venkatesh
>>
>> On Thu, Feb 1, 2018 at 3:45 AM, Edwin Castro <egcastr at gmail.com> wrote:
>>
>> > Rob's exactly right!
>> >
>> > I'll repeat what I said earlier, "The code sample really depends on
>> > what you have in the Fragment(s) containing WixUIBannerBmp and
>> WixUIDialogBmp.
>> > ... So if *I don't have anything I can reference*, then ..."
>> >
>> > If you have a UI element in the Fragment containing WixUIBannerBmp
>> > and/or WixUIDialogBmp, then just use UIRef. If there is another
>> > element you can reference, then reference that element.
>> >
>> > Don't do my property hack unless you don't have any other options.
>> >
>> > --
>> > Edwin G. Castro
>> >
>> >
>> > On Wed, Jan 31, 2018 at 11:39 AM, Rob Mensching <rob at firegiant.com>
>> wrote:
>> >
>> >> UIRef?
>> >>
>> >> _____________________________________________________________
>> >>  Short replies here. Complete answers over there:
>> >> http://www.firegiant.com/
>> >>
>> >>
>> >> -----Original Message-----
>> >> From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On
>> >> Behalf Of Edwin Castro via wix-users
>> >> Sent: Wednesday, January 31, 2018 10:21 AM
>> >> To: Ven H <venh.123 at gmail.com>
>> >> Cc: Edwin Castro <egcastr at gmail.com>; WiX Toolset Users Mailing List
>> >> < wix-users at lists.wixtoolset.org>
>> >> Subject: Re: [wix-users] WixVariable in a separate wxs
>> >>
>> >> The code sample really depends on what you have in the Fragment(s)
>> >> containing WixUIBannerBmp and WixUIDialogBmp. Remember that when you
>> >> reference anything inside a Fragment you get everything in that
>> Fragment.
>> >> So if I don't have anything I can reference, then I create an
>> >> arbitrary Property used just for referencing.
>> >>
>> >> <Fragment>
>> >>     <!-- Contains other stuff like WixUIBannerBmp and/or
>> >> WixUIDialogBmp
>> >> -->
>> >>     <Property Id="DoesNotMatterButWillShowUpInPropertyTable"
>> >> Value="DoesNotMatter"/>
>> >> </Fragment>
>> >>
>> >> Then in another <Fragment> or <Product> I simply reference the
>> Property:
>> >>
>> >> <Product ...>
>> >>     <!-- other stuff that goes in Product -->
>> >>     <PropertyRef Id="DoesNotMatterButWillShowUpInPropertyTable"/>
>> >> </Product>
>> >>
>> >> I choose an Id that has some meaning for me but isn't too esoteric. I
>> >> usually just set Value="1".
>> >>
>> >> --
>> >> Edwin G. Castro
>> >>
>> >>
>> >> On Wed, Jan 31, 2018 at 9:50 AM, Ven H <venh.123 at gmail.com> wrote:
>> >>
>> >> > Thanks a lot, Edwin. Sorry for being a bit naive here, but can you
>> >> > please provide a code sample?
>> >> >
>> >> > Regards,
>> >> > Venkatesh
>> >> >
>> >> > On Wed, Jan 31, 2018 at 11:15 PM, Edwin Castro <egcastr at gmail.com>
>> >> wrote:
>> >> >
>> >> >> Yes. You just need to be able to reference something in the
>> >> >> Fragment(s) that contain WixUIBannerBmp, WixUIDialogBmp. Perhaps
>> UIRef?
>> >> >>
>> >> >> Sometimes I create Properties that I don't actually use for
>> >> >> anything other than to reference them from another Fragment with
>> PropertyRef.
>> >> >>
>> >> >> I kind of wish there was a way to reference a Fragment directly
>> >> >> for situations where I don't have something I can reference in the
>> >> Fragment...
>> >> >>
>> >> >> --
>> >> >> Edwin G. Castro
>> >> >>
>> >> >>
>> >> >> On Wed, Jan 31, 2018 at 9:32 AM, Ven H via wix-users <
>> >> >> wix-users at lists.wixtoolset.org> wrote:
>> >> >>
>> >> >>> Is it possible to have wix variables like WixUIBannerBmp,
>> >> >>> WixUIDialogBmp in a separate wxs file, rather than Product.wxs?
>> >> >>> If yes, please explain how.
>> >> >>> Since the values of these variables are paths, I cannot have them
>> >> >>> as properties and I don't want to use preprocessor variables.
>> >> >>> Please
>> >> help.
>> >> >>>
>> >> >>>
>> >> >>> Regards,
>> >> >>> Venkatesh
>> >>
>> >
>> >

Here is a full example of using a wxi file to check the build
architecture and set the Win64 variable which is "yes" or "no". I do
lots of other stuff in there too. Think of a wxi as a place to put
things you want to change dynamically before the installer is built
(paths to source files, versions). The source is a modified version of
the one found on StackExchange. I have also added other variables like
version and build secondary variables.

This incarnation of the installer uses a custom Include.wxi file in
each visual studio project (Lua 5.1, lua5.3), but only one installer
source. I do that by putting the "things that are different" in the
include.wxi files, but everything else is the same. Works like
gangbusters.

Curerntly my CustomaAtion doesn't work, but everything else works. The
components and component groups are a bit of a mess, but it all seems
to work. The installer code is FreeBSD licensed.

Cheers,

Russ

>> ____________________________________________________________________
>> WiX Toolset Users Mailing List provided by FireGiant
>> http://www.firegiant.com/
>>
>> ____________________________________________________________________
>> WiX Toolset Users Mailing List provided by FireGiant
>> http://www.firegiant.com/
>>
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant http://www.firegiant.com/


More information about the wix-users mailing list