Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

7.0 Installer–Inside Scoop (1/2)


I am sure everyone in the DotNetNuke ecosystem had to go through Installation at least once and Upgrades multiple times. In 7.0 we decided to simplify the user experience for Installation and Upgrade. We wanted to provide one-click installation experience without having to go through multiple steps. Initially three Engineers were tasked to work on the new Installer, with one them being yours truly. I am dedicating 2 blogs to go through a couple of challenges we faced and how the team resolved it.

Port Mann Bridge

The picture above is that of new Port Mann Bridge (under construction) in Vancouver, BC, Canada on a very popular Highway (named #1). You may wonder why I choose this picture. Every time I pass by the old bridge I salute to the Extreme Engineering going behind building this massive bridge. The thought always runs through mind on how well they plan and execute; after all people’s lives and livelihood depends on quality of construction. In the Software world we always talk about dogfooding, infact DotNetNuke practises it very well, is hostned on the DotNetNuke framework itself. However, the above is Dogfooding on steroids. Construction workers actually use unfinished bridge itself to construct further. The partly finished portion better have the best quality. The picture above shows lots of construction vehicles on the partly finished portion.

Story is similar on the Installer side as well, where we actually use the Installer to install framework while developing on the framework. Always a fine balance, develop enough that nothing else breaks but at the same time keep plugging ahead.

Separate Branch

We had to do a lot of prep work before we could write a single line of new installer code. It was almost like getting the patient ready before the surgery.

The DotNetNuke Engineering team works in an Agile fashion where great emphasis is given to Continuous Integration (CI). We run number of Build Verification Tests (BVTs) with every checkin. BTW, we use Team City for CI. Cruise Control used to be our CI tool, which is long gone now and we don’t miss J

Many Engineers install DotNetNuke several times a day. We didn’t want to interfere with Development and Testing efforts on other features. So, we created a separate branch just for Installer work. We merged to the main trunk right after a Sprint or two. BTW, our Sprints are 2 weeks long (more on that in a future Blog).

Reset Scripts


The installation process is pretty intrusive, where it makes lots of changes here and there (web.config, file system, database, etc.). Things get created, updated and deleted. It’s not very easy to go back to preinstall stage once installation is completed or underway.

We created special batch files to backup pre-installation stage and then restore on demand. We were able to use the scripts to run quick tests and get back to the starting point pretty quickly. These scripts are usually combination of xcopy, osql, iisreset and couple of PowerShell scripts.

I will blog about the scripts in future.

Progressbar and Key Milestones


One of the key requirements of the Installer was to show a Progressbar and status of key milestones. The older Installer displayed the entire Installation activity all on one page.

Telerik Progress Area

Telerik’s Progress Area was the first choice for Progressbar as we already use this control in Content Localization and have good sample code. Not so fast. We ran into following obstacles:

1. Telerik Dll wasn’t part of Bin folder to start with, as it gets added during installation. Not a big deal we could add it as part of pre-install.

2. This control didn’t have a lot of client-side features we were looking for. Not a big deal, we could write additional jQuery to get by.

3. However, the deal breaker was missing web.config entries needed for the Ajax call back. We said it’s enough of tinkering to get a Progressbar going.

That was a bummer, time to move on J

jQuery Progressbar

Next option we looked for was jQuery Progressbar. It actually looked pretty promising as it had a pretty simple API set and easy to configure and use. We settled on jQuery Progressbar pretty quickly.

Move on to my next blog on more adventures with the Progressbar.


Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (22)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (270)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?