[wix-users] WixVariable in a separate wxs

Russell Haley russ.haley at gmail.com
Thu Feb 1 08:50:09 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.

I believe this is where you are incorrect. wxi files are processed
before the installer is created. Then any place the pre-processor
finds the wxi variables in your *other files* (i.e. a variable in the
product.wxs files), are then dynamically replaced.

Again, see Pre-processor variables are needed to set things
dynamicallly before installation. Setting custom images and other
things are all in the installer linked here in the wxi file.

https://github.com/WinLua/WinLua-VisualStudio/tree/master/Visual%20Studio/WinLua-Installer


> 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
>> >>
>> >
>> >
>>
>> ____________________________________________________________________
>> 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