注册 | 登录

解决c# - WiX: how to access / change installation directory in managed bootstrapper?

itPublisher 分享于



I am creating a WPF setup application with a custom user interface. I started with the tutorial of Bryan P. Johnston:

Somewhere in my view, I have a simple TextBox that binds to a Property InstallationPath in my MainViewModel.

Now I want this path to be used when the user clicks on "Install". For this, I have a button that binds to my InstallCommand. The following method is called (taken directly from the tutorial):

private void InstallExecute()

How can I make the packages to be installed into the directory of my property InstallationPath?


I found a similar question here on Stackoverflow:

Wix: Specify the INSTALLLOCATION of packages inside the burn managed bootstrapper

The answer there is from Bob Arnson

Use an MsiProperty child for each MsiPackage to specify INSTALLLOCATION=[BurnVariable]. Then use Engine.StringVariables to set BurnVariable.

Now, I think I could access the StringVariables in my InstallExecute like this

private void InstallExecute()
    Bootstrapper.Engine.StringVariables["BurnVariable"] = InstallationPath;

But where to define this variable? I guess somewhere in Product.wxs?

c# wix bootstrapper
edited Feb 22 '13 at 9:31 asked Feb 22 '13 at 7:37 Michael Hilus 429 4 20      Hey Michael, i followed this same tutorial and I'm facing an issue where during major upgrade, the previous exe is not getting removed as new one is installed side by side. I incremented both the EXE version and the included MSIs versions. I saw some other people commenting the same issue below the tutorial. Did you run into this issue? If so how did you get over it? :( Need some help man –  mayooran Apr 27 '16 at 2:31


2 Answers


Yes just create a variable in your burn bootstrapper:

<Variable Name="BurnVariable"
          bal:Overridable="yes" />

you can then pass this as a parameter to your boot-strapped msi package:

<MsiPackage SourceFile="$(var.YourMsiProject.Installer.TargetPath)" Compressed="no">
    <MsiProperty Name="INSTALLLOCATION" Value="[BurnVariable]" />          

answered Feb 22 '13 at 11:38 caveman_dick 3,483 2 16 38      Thanks! That is exactly what I was looking for. :-) –  Michael Hilus Feb 22 '13 at 16:20


One missing property "Type" on Bundle Variable element. caverman_dick is right but this not works properly when not overridable. You can try this too, setting Type="string".

Wix Variable Element

  <Variable Name="MyApplicationMsiInstallFolder" Value="[WindowsVolume]MyApplication"
          bal:Overridable="yes" Type="string"/>
        <?if $(var.DbVersion) = false?>
        <PackageGroupRef Id="AccessDatabaseGroup"/>
        <RollbackBoundary />
        <MsiPackage Id="MyApplicationMsiPackage" SourceFile="$(var.MyApplicationSetup.TargetPath)" DisplayInternalUI="no"
                                Vital="yes" >
            <MsiProperty Name="APPLICATIONFOLDER" Value="[MyApplicationMsiInstallFolder]"/>

answered Jun 19 '15 at 2:32 antonio 114 8









您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱