WiX v3.10 version twist

After a brief hiatus for releasing WiX v3.9 R2, weekly builds for WiX v3.10 have resumed. WiX v3.10.0.1403 is now available — and you might have noticed an oddity in the version number.

When we started discussing the need to ship a maintenance release for WiX v3.9, we realized that we had no way to easily differentiate a maintenance release from the original “final” release — or any other pre-release build, for that matter.

Traditionally, WiX version numbers have been based on using three fields: major.minor.build. You likely know why: Because Windows Installer uses three version fields and ignores the fourth. Unfortunately, when you want to keep using major.minor versioning, that leaves only one field to identify a particular build.

So we decided to switch things around a bit. We’re now versioning the WiX bundle as major.minor.release.build. The release value is currently zero and will stay that way until/unless we ship a maintenance release. For example, WiX v3.10 RTM might be v3.10.0.2010 and a theoretical WiX v3.10 SP1 might be v3.10.1.2323.

The MSI packages in the WiX bundle continue to be versioned as major.minor.build.0, so that major upgrades keep working. The same is true of WiX executables. That means that, for example, Candle.exe from the aforementioned theoretical WiX v3.10 SP1 would have a version of v3.10.2323.0.

I’d rather all the versions — bundle, MSIs, and executables — have the same version number but tagging the bundle with release information is important enough to make this change.


Unfortunately, the new versioning scheme means that new builds of WiX v3.10 are always seen as “less than” any of the already-released WiX v3.10 builds with the old numbering. That means that if you have v3.10.1124.0 installed, for example, v3.10.0.1403 will not be seen as an upgrade. The WiX BA blocks downgrades by hiding the big Install button:

WixNoDowngradeThe workaround is to uninstall any other build of WiX v3.10. Then v3.10.0.1403 will install normally.

WiX Toolset v3.9 R2 maintenance release is available

WiX Toolset v3.9 R2 is a maintenance release of WiX v3.9 that fixes several serious bugs:

  • Bug 4600 | VSExtension Help custom action binaries are corrupt.
  • Bug 4608 | Multiple prerequisites return failure, when 1st prerequisite is already installed and 2nd prerequisite is installed successfully.
  • Bug 4609 | Bug in BVariantCopy() in src/burn/engine/variant.cpp

Thanks to @rseanhall and @firegiantco for fixing these bugs.

WiX Toolset v3.9 R2 is v3.9.1208.0 and is available from Codeplex.


WiX v3.10 begins and is already mostly done

The first interim build of WiX v3.10 has been released: WiX v3.10.1124.0 from wixtoolset.org. It includes support for integrating Votive into Visual Studio 2015 Preview and native and managed libraries for VS2015.

And that’s most of what we intend to accomplish with WiX v3.10. We will — of course! — fix bugs and add some small features in WiX v3.10 but the focus is on supporting Visual Studio 2015 and, if necessary, Windows 10. Rather than filling the available schedule with work, the goal is to finish the planned work quickly and be ready to ship WiX v3.10 as soon as possible after Visual Studio 2015 ships.

To do that, WiX v3.10 won’t include any large new features, to reduce the risk of long bug tails. We’ll release milestone builds around new milestone builds of VS2015 to make sure changes in VS2015 are reflected in WiX v3.10. Bug fixes and small features are welcome and a few are already queued up in pull requests on GitHub. More are welcome! Let’s talk on wix-devs.

WiX v3.9 released

Update: WiX v3.9 R2 has been released.

WiX v3.9 was officially released on Hallowe’en 2014. The release build is the same as RC4: v3.9.1006.0. Download the release here.

For Rob’s take, see his blog post.

The following people contributed to WiX v3.9 over the 11 months since WiX v3.8 was released:

It’s great to see the list of contributors growing release after release!

The major features of WiX v3.9 are:

  • @rseanhall lets you run a post-install configuration tool that requires elevated priveleges after a bundle is installed. WIP / Bug  / Pull request
  • @jchoover added update detection to the Burn engine. Bug / Pull request
  • @rseanhall added support for multiple managed-BA pre-requisite packages. WIP / Bug / Pull request
  • @rseanhall added support for secure string variables in Burn. WIP / Bug / Pull request

Minor features include:

  • @jchoover updated the WiX installer to use the new update feature. Pull request
  • @heaths added the Windows “Threshold” compatibility GUID to Burn. Pull request
  • @FernandoNunes contributed localizations for Portuguese for WixSqlExtension. Pull request
  • @robmen updated the WiX release feed for the update functionality in the WiX installer. Bug / Pull request
  • @barnson changed the WiX installer to install the native-code WiX SDK for Visual Studio Express editions. Pull request
  • @robmen marked deprecated command-line switches that are removed from WiX v4.0. Bug / Pull request / Pull request
  • @barnson added a verbose message that reveals how much time was spent running ICE validation. Pull request
  • @barnson made a few updates that made the WiX build faster on many-core machines. Pull request / Pull request
  • @heaths added support for temporary object columns in DTF. Pull request
  • @flcdrg added support in DTF custom action builds to include COM interop reference assemblies. Pull request
  • @heaths added support for Visual Studio “Dev14″ in WixVSExtension detection properties. Pull request
  • @heaths added support for user creation in WixUtilExtension to be non-vital (i.e., fail without causing rolling back). Bug / Pull request
  • @rseanhall added a blocker to prevent .NET 4.5.2 from being used as a pre-req package on Windows 7 RTM because .NET 4.5.2 requires Windows 7 SP1. Bug / Pull request
  • @heaths added policy support to move the Burn package cache to a non-default folder. Bug / Pull request
  • @rseanhall added the WixBundleExecutePackageCacheFolder bundle variable. Bug / Pull request
  • @robmen defaulted Burn to using hashes to verify payloads rather than digital signature. Bug / Pull request
  • @barnson added the ProcessorArchitecture, WixBundleOriginalSourceFolder, and WixBundleFileVersion bundle variables. Bug / Bug / Pull request / Pull request / Pull request / Pull request
  • @gordonmcshane added .NET 4.5.2 package groups to WixNetFxExtension. Pull request
  • @johnbuuck added support for MSBuild v12.0 in project harvesting. Bug / Pull request
  • @rseanhall added the @Cache=”always” value to force a bundle’s package to be cached even if the package won’t be installed. Bug / Bug / Pull request
  • @heaths added a number of features and fixes to better support ref-counting and patching in Burn. Bug / Bug / Pull request / Pull request
  • @mavxg added User/@LogonAsBatchJob to WixUtilExtension. Pull request
  • @barnson added the -sextract switch to Melt.exe to not extract MSI package payloads but still update the .wixpdb. / BugPull request

Fixes include:

  • @robmen fixed a long-standing bug in WixStdBA that caused a hang when installing as local system on Windows Vista and Server 2008. Bug / Pull request
  • @robmen fixed a bug dating from WiX v2.0(!) that caused bad modularization when keywords like OR were part of property names. Bug / Pull request
  • @rseanhall fixed a nitty-gritty bug in DTF tools that created custom action DLLs that didn’t exactly follow an arcane spec. Bug / Pull request
  • @barnson fixed a bug in Burn that caused command lines to replicate like gray goo when a BA called Plan multiple times. Bug / Pull request
  • @rseanhall added a missing extension to the binaries .zip.
    Pull request
  • @rseanhall made sure that that a bundle’s bootstrapper application is the first payload in the UX container so Burn doesn’t try to execute an arbitrary file. Bug / Pull request
  • @jchoover tweaked the WiX installer to skip checking for updates when it doesn’t make sense. Bug / Bug / Pull request
  • @barnson fixed Burn so it resumes after rebooting. Bug / Pull request
  • @barnson fixed Burn so it didn’t ignore a rollback of a related bundle. Bug / Pull request
  • @jchoover fixed some memory leaks in Burn. Also fixed some memory leaks in Burn. Pull request
  • @barnson fixed DTF so that it doesn’t exclusively lock icons when reading them. Bug / Pull request
  • @barnson solved the case of the mysteriously missing native-code SDK files. Bug / Bug / Pull request / Pull request
  • @barnson fixed Wix.sln by removing an obsolete file. Bug / Pull request
  • @rseanhall made sure Burn cleans up a downloaded update when appropriate. Bug / Pull request
  • @barnson made sure the WiX installer doesn’t crash when you don’t have a browser installed that knows about .html files. Bug / Pull request
  • @barnson added a warning to the doc about a limitation with PerfCounterManifest. Bug / Pull request
  • @rseanhall ensured that you can use LaunchTarget without LaunchArguments. Bug / Pull request
  • @rseanhall changed DTF so it sets the working directory for a custom action. Bug / Pull request
  • @rseanhall decided that Burn should decrypt files coming from an encrypted folder. Bug / Pull request
  • @heaths converted, enhanced, and cleaned up some duplication in the WiX tests. Pull request / Pull request / Pull request / Pull request
  • @heaths let you have an unreal table with way too many columns. Bug / Pull request
  • @heaths optimized away the repair of dependent bundles of uninstalling a bundle is a no-op. Bug / Pull request
  • @heaths showed progress in Burn when waiting on BITS to download. Bug / Pull request
  • @heaths supported long command lines after rebooting in a bundle. Bug / Bug / Pull request
  • @heaths optimized some Burn patch detection. Bug / Bug / Pull request
  • @barnson validated MsiPackage product versions are legal for Burn (when using .msi packages built with something other than WiX, which apparently sometimes still happens). Bug / Pull request
  • @barnson fixed a problem with a particular CustomTable definition. Bug / Pull request
  • @champloo convinced tools to show an error rather than throw an exception when they can’t set file attributes. Bug / Pull request
  • @firegiantco made it possible to use any legal exit code in ExePackage/ExitCode/@Value. Bug / Pull request
  • @barnson updated the list of tables that prevent patch uninstall. Bug / Pull request
  • @sryze fixed the layout of a WixUI dialog when localized into Russian. Pull request
  • @rseanhall added verification to the VersionVariables for managed BAs. Bug / Pull request
  • @rseanhall prevented Burn from entering an endless loop with a malformed command line. Bug / Pull request
  • @robmen made sure error codes are reported during cache checking in Burn. Bug / Pull request
  • @robmen pointed to new documentation on wixtoolset.org for error 0217. Bug / Pull request
  • @barnson added a check of file size when determining whether a cabinet needs to be rebuilt in the linker. Bug / Pull request
  • @barnson fixed the layout of a WixUI dialog for Portuguese.  Bug / Pull request
  • @barnson fixed a crash in Dark.exe. Bug / Pull request
  • @barnson added some documentation about output type in Votive property pages. Bug / Pull request
  • @barnson plugged a memory leak in Burn and removed some dead code. Bug / Pull request
  • @rseanhall fixed Burn to ensure progress isn’t above 100 percent. Bug / Pull request
  • @barnson fixed compression level when set with MediaTemplate. Bug / Pull request
  • @barnson added some documentation to clarify the things that change “bitness” when using the -arch switch. Bug / Pull request
  • @barnson prevented infinite recursion of include files by enforcing a maximum depth. Bug / Pull request
  • @rseanhall wielded the red pencil and improved the documentation. Pull request / Pull request
  • @barnson restored MsuPackage’s ability to set RemotePayload. Bug / Pull request
  • @rseanhall supported DTF being installed into the GAC. Bug / Pull request
  • @barnson clarified an error message about quotes in filenames. Bug / Pull request
  • @ericschultz ensured that VsizPackage ids that contain spaces are quoted when passed to VsixInstaller. Bug / Pull request
  • @barnson fixed a crash in Heat. Bug / Pull request

Like WiX v3.8, v3.9 took about 11 months. We’d aimed for a shorter cycle but missed. I’m not going to lose any sleep over that; we did good work and v3.9 looks to be a great release.

Next up: We know WiX v3.10 is about Visual Studio “Dev14″ and Windows 10. What else? The conversation happens on the wix-devs mailing list.


Cabinet compression testing

Over in a WiX v4.0 pull request, Rob and I were discussing what the default compression level should be in WiX v4.0. In WiX v3.x, the default compression level is “mszip” which, listening to legend and lore, I always considered to provide decent compression and decent performance. Rob suggested using “high” compression level, which I’d always avoided except for nightly builds. Sometimes not even then since it’s known—again, legend and lore—to be extremely slow.

As I point out in the pull request, however, the only way to be sure is to measure it.

So that’s what I did. Continue reading Cabinet compression testing