TeamCity + InstallAware + {SmartAssembly} = Win

Being one of the only developers on a few projects means that I cannot spend hours configuring builds, managing releases, coordinating builds and the like. I need to spend time refining my product, testing, QA and selling it. I just released a product from my company and tracked how much time it took me, out of a build/revision to get the final installer package ready for distribution. On average I spend about 25% of my time moving files around, running programs, building, waiting and resetting to get the two deliverables out for every build.

Time holes like that one can kill your motivation and your project. As a business owner and developer I need to spend time building my client base, working with customers and refining my product. Major amount of time spent doing anything else could hurt me and my company down the road. I believe this is why a lot of small development shops have trouble or fail completely, they aren’t ready for the marathon, they prepared for the 100 meter dash.

Realizing that I was spending too much time doing work that should be automated I started to look around at the tools I had available to me, low and behold they all look like they could work together. TeamCity is a Build and Continuous Integration Server that free version, the Professional Version, that is perfect for my size. We also use it at my work and a co-worker has it doing some amazing things. So I installed TeamCity on a old piece of hardware I had lying around and got it running. I used NAnt to get the project configured correctly and build.

Once TeamCity was up and running I needed to get my assemblies and executables protected by {SmartAssembly}, which is my .Net Framework code/IP protection tool of choice. {SA} support command line execution so it was a snap calling their command line application from NAnt in my build script.

Finally it was time to build my MSI installer using InstallAware. I’ve gone back and forth on my setup creator for a long time. I’ve used InstallShield, WISE, MSI Factory and others but I just felt comfortable with IA. Although you have to buy the Developer edition to get the ability to do command line building it could be worth it. Also they broke the command line build in 9.0 on purpose which required a UI handle, so it couldn’t be run by a service. Thankfully they fixed it in 9.06, but what a bad mistake. I just added the variables to NAnt and away I went.

The last piece of the puzzle was serving up these completed setup packages. Thankfully TeamCity has the concept of Artifacts, which when I setup are pointed to the setup.exe emitted from InstallAware.

The result? unit tested, compiled, secured and packaged file, ready for QA and release.


I love the smell of automation in the morning.

About: Shawn Jackson

I’ve spent the last 18 years in the world of Information Technology on both the IT and Development sides of the aisle. I’m currently a Software Engineer for Paylocity. In addition to working at Paylocity, I’m also the Founder of Resgrid, a cloud services company dedicated to providing logistics and management solutions to first responder organizations, volunteer and career fire departments, EMS, ambulance services, search and rescue, public safety, HAZMAT and others.

2 thoughts on “TeamCity + InstallAware + {SmartAssembly} = Win”

  1. Have you decided on a licensing solution? After a quick glance at SmartAssembly’s web site, the product is an obfuscator with some bonus features. I’m in the same boat: evaluating many licensing solutions.

    I’ve enjoyed reading your past candid reviews of licensing solutions. Have you considered Nalpeiron? I’ve just begun evaluating the service.

  2. I have not at this point. I have a few more reviews lined up, but unfortunately it takes a while to get them done.

    I haven’t tried or heard of Nalpeiron, but based on your feedback I just added it to my list.

    Thanks for the feedback Bryan and good luck on your eval, I hope it goes well. There’s nothing more fun they testing out licenses solutions :-).


Comments are closed.