New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

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.

4.6.0 - A Sneak Peek (2) - A new Universal Extensible Installer

In a previous blog I described the new Authentication Provider system being developed for the next release of DotNetNuke.  One of the challenges that arose in developing these providers was - How will we install them?

Enter - "Universal Extensible Installer".

We currently have a number of extensibility points - some of which have their own installers (Modules, Skins, Language Packs) and some of which don't (EditControls/DataTypes for the Property Editor).  In addition some modules have their own extensibility points - Report Visualisers (Reports), Templates (Repository), and these modules have resorted to either build their own installer or to rely on FTP methods and manual tweaks to install.

One of the early strengths of DotNetNuke over its competitiors was support for installation of custom extensions by uploading a zip file in the application itself - no need for FTP or manual tweaks to files.  As the number of extensibility points increases it has become difficualt to support this ability in a consistent and unified manner.

The new "Universal Extensible Installer" will accomplish this goal.  In the next release we will be including the framework for this installer and implementing it in the new Authentication System Installer (as well as for the EditControls which currently lack an installer).  At a later stage we will port the existing installers (Modules, Skins, Language Packs) to use the new system.

What is this Installer?  How does it work? 

Some of the technical details are beyond the scope of a simple blog post but I will summarise the features of the installer below:

  • A DNN feature is a "Package"
  • Packages will provide common metadata (name, type, license, company name etc)
  • As all Packages have the same structure there will be a central Install.ascx page for installs, and a central UnInstall.ascx file for uninstalls
  • A Package can contain a number of Components (AuthenticationSystem, Files, Assemblies, DatabaseScripts, Config chages)
  • A zip file can contain multiple packages or features
  • A zip file will contain a single dnn manifest file - with information about the package and each component in the package.
  • The Installer will parse the zip file (as it does for modules today), and create a deep object model of Packages/Components
  • Each Component type has its own dedicated Installer (derived from a ComponentInstallerBase class)
  • The Installers are registered in the Lists table (similar to how EditControls are today)
  • The Package Installer will identify the correct component Installer to use based on the Database entry and instantiate the appropriate Installer class - all that is required is that the installer be located in an assembly in the bin
  • New Installers can be added by registering a new entry in the Database - this is the main extension point - a module developer that wishes to provide a template Installer will create the appropriate TemplateInstaller and add an entry to the Lists table (in its install script), and provide the appropriate link to the Install/UnInstall pages.  Note: the Installer itself provides utility methods to build the appropriate links.
  • Packages will be registered in the Database (together with the manifest for that package), fo easy uninstall
  • Common Component Installers will be provided by the core (Files, Assemblies, Scripts, Config changes) for use by package installers
  • Components will handle how their own data is registered.
  • ComponentInstallers will need to support 4 methods (Install, UnInstall, Commit and Rollback).  This will allow the Package Installer to roll back partially complete installations when a component install fails.

So the upcoimg release will incclude the new Package Installer, and will include core component installers for files and assemblies as well as package specific component installers for Authentication Systems and EditControls.  Future Releases, will port the three major installers (Modules, Language Packs and Skins) and provide a unified Host/Admin UI.

I believe that this new Enhancement will provide a huge benefit for the Extensions EcoSystem as it will open up the possiblities for adding new extension points (and new revenue possiblities for developers and designers)


Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Davies (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
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 (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (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)
Steven Fisher (1)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out