wix major upgrade not installing all files

The log file provided shows that newer versions of a few files already on the machine: MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {015A4DC1-56F4-562B-96B5-B3BE0D45FA5F} since the same component with higher versioned keyfile exists MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {4B6A1404-3892-5BEF-AB47-8FE3149211A4} since the same component with higher versioned keyfile exists I’ve seen this … Read more

Custom WiX Burn bootstrapper user interface?

The key thing to know is that there is a BootstrapperCore.dll in the WiX binaries that defines a BootstrapperApplication class that handles the integration with the Burn engine. I needed to create my own derived class and override the ‘Run’ method to launch my custom UI. It was also helpful to use the WixBA project … Read more

Wix generate single component id for entire tree

Use one file per component – this avoids all sorts of problems (except .NET assemblies spanning multiple files). See the following thread: One file per component or several files per component? Wix is a great framework for creating installers, but it has a steep learning curve. I strongly recommend you read a few sections of … Read more

Wix C# Custom Action Logging Not Working

Per the docs on DoAction ControlEvent, MsiProcessMessage (the API behind session.Log) cannot be used from a ControlEvent. This prevents your message from showing up in the log. If you need to log some information from a ControlEvent (especially for debugging), your best bet is a hack like changing a property’s value to contain your desired … Read more

What is the usage of TARGETDIR and INSTALLDIR in WiX?

After doing more digging, it looks like my previous experience is a result of behavior specific to VSDPROJ’s (and possibly InstallShield), wheras WiX is conforming to the Windows Installer. As I discovered at this link, TARGETDIR is actually supposed to represent the root of the drive with the most free space available (assuming there’s more … Read more

WiX: Digitally Sign BootStrapper project

<Target Name=”UsesFrameworkSdk”> <GetFrameworkSdkPath> <Output TaskParameter=”Path” PropertyName=”FrameworkSdkPath” /> </GetFrameworkSdkPath> <PropertyGroup> <Win8SDK>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0@InstallationFolder)</Win8SDK> </PropertyGroup> </Target> <Target Name=”UsesSignTool” DependsOnTargets=”UsesFrameworkSdk”> <PropertyGroup> <SignToolPath Condition=”(‘@(SignToolPath)’==”) and Exists(‘$(FrameworkSdkPath)bin\signtool.exe’)”>$(FrameworkSdkPath)bin\signtool.exe</SignToolPath> <SignToolPath Condition=”(‘@(SignToolPath)’==”) and Exists(‘$(Win8SDK)\bin\x86\signtool.exe’)”>$(Win8SDK)\bin\x86\signtool.exe</SignToolPath> </PropertyGroup> </Target> <Target Name=”SignBundleEngine” DependsOnTargets=”UsesSignTool”> <Exec Command=”&quot;$(SignToolPath)&quot; sign /d &quot;App Setup&quot; /t http://timestamp.digicert.com /a &quot;@(SignBundleEngine)&quot;” /> </Target> <Target Name=”SignBundle” DependsOnTargets=”UsesSignTool”> <Exec Command=”&quot;$(SignToolPath)&quot; sign /d &quot;App Setup&quot; /t http://timestamp.digicert.com /a &quot;@(SignBundle)&quot;” … Read more

Failed to get MSI property in UPGRADINGPRODUCTCODE, WIX_UPGRADE_DETECTED

Ignoring the debug strings, it’s easier to see that the buffer handling is incorrect. I would suggest also outputting the return values from MsiGetPropertyA() and the value in dwValue to confirm, but here’s what I think is happening (comments refer to dwValue): char szBuff[1024]; DWORD dwValue = 0; MsiGetPropertyA(hInstall, “UPGRADINGPRODUCTCODE”, szBuff, &dwValue); // passes 0, … Read more