Creating a simple bootstrapper - Project template

The previous post looked at a proof of concept for building a simple bootstrapper solution to elevate the execution of an MSI package. This post will outline how this proof of concept was converted into a VSIX project template. Using a project template was going to be the best way to achieve portability and reusability of this bootstrapper concept. The initial attempts at producing a project template were to use the inbuilt File –> Export template function in [VS] on the proof of concept pro... [More]

Creating a simple bootstrapper - Proof of concept

The previous post discussed the pain points of putting validation into the UI sequence of an MSI package that require elevation. The outcome of some research was that a bootstrapper was the best way to get around this. To recap, my design requirements for a bootstrapper solution were: Seamless [VS] integration and compilation Bootstrapper must be completely self-contained Bootstrapper must be quiet (no UI) and simply execute the MSI package Automatically elevate the packaged MSI... [More]

Creating a simple bootstrapper - Introduction

Last month I was creating a WiX setup package to deploy a new system. In the past we have typically required the user to execute the MSI from the command line and provided all the MSI arguments required by the package. We have also played with transform packages to achieve the same result. I am not a fan of either of these methods and want to push configuration options into the installer UI as a way of minimising user error while maintaining flexibility. I came across the excellent MsiExt proj... [More]

Pitfalls of cancelling a VSIX project template in an IWizard

I’ve been creating a VSIX project template for [VS] over the last week or two. The project contains an IWizard class implementation to allow the user to define some information for the template. I have noticed one weird quirk when it comes to cancelling the wizard. The project template is written to disk before the IWizard.RunStarted method is invoked. This raises some questions about how to cancel the wizard process and make the solution (and disk) look like nothing ever happened. How to can... [More]

Unable to preserve pending changes on gated check in

Gated check in with TFS 2010 is a brilliant feature. Unfortunately the “Preserve my pending changes locally” checkbox is sometimes disabled and it isn’t clear from the UI why this is the case. There is an MSDN forum thread (here) that provides some reasons why this happens. The checkbox will be disabled if there are locks on some of the files in the changeset, the changeset contains binary files or exclusive check-out option is used on the team project. The one that has been h... [More]

Neovolve.BuildTaskExecutor 1.0 Released

Over the last week I have posted a series of entries about how to execute custom tasks as part of a build process without TFS. The result of this process is the Neovolve.BuildTaskExecutor 1.0 application which is now available on Codeplex. The following posts document how BuildTaskExecutor has come about: Executing build tasks without a build server – Design Executing build tasks without a build server – Implementation Executing build tasks without a build server – In action Exe... [More]

Executing build tasks without a build server – Creating a custom ITask

Following on from the previous posts in this series, this post will look at how to create a custom task that can then be executed via BTE. This post will provide an example of how to create a task that will allow execution of multiple tasks from a single command line execution. The task itself is fairly meaningless as you can simply invoke BTE several times to get the same result. It does however provide a good example of how to use some of the services provided by BTE. The first thing to do is ... [More]

Executing build tasks without a build server – Example scenario

My last few posts have described the process of building an application that can manage custom build tasks without the availability of a full TFS environment (here, here and here). This post will look at how I use this application and all its tasks to manage the product version of a [VS] solution. The product I originally wrote BuildTaskExecutor (BTE) for is the .Net port of my old VB6 Switch program which is now hosted out on Codeplex (here). The build tasks I want to execute when this solutio... [More]

Executing build tasks without a build server – In action

The previous post provided the implementation of the BTE application. It described how the implementation of BTE is able to satisfy the original design requirements by providing an extensible task execution model. The following are some examples of BTE running on the command line. I am using a batch file in order to shorten BuildTaskExecutor.exe down to bte. 1) Executing BTE without arguments 2) Executing the help task 3) Executing the help task for a specific task name (or alias in this case)... [More]

Executing build tasks without a build server – Design

At work we run TFS2010 with build controllers, build agents and lab management. I have customised the build workflow so that we can get a lot more functionality out of the automated build process. Some of these customisations are things like: Finding the product version number Incrementing the product version number Updating the build name with the new product version Updating files prior to compilation Updating files after compilation Building Sandcastle documentation Deploying MSIs to remove ... [More]