ADefHelpDesk does not really need an "Upgrade Advisor" but I made one anyway as a proof of concept for the DotNetNuke Core Project. There are thousands of users who do have difficulty upgrading DotNetNuke. My theory is that it should be possible to make a module that users could install before they do an upgrade that would identify potential upgrade problems.
Windows 7 does this when you do an upgrade and it really helps. I decided to use Silverlight because Silverlight allows you to perform long running processes without timing out.
When you first open the module it will identify you and present a button that will call the ADefHelpDesk.com web service to determine if you are running the latest version of the ADefHelpDesk Upgrade Advisor. Silverlight cannot call a web service that is from a different domain than it was launched from, so it actually calls a web service in the ADefHelpDesk Upgrade Advisor module and it calls the web service on ADefHelpDesk.com.
If you are running the current version, a button to continue is presented. Otherwise, you would be instructed to download the latest version of the ADefHelpDesk Upgrade Advisor module.
Next, you are presented with a button that will determine what version of ADefHelpDesk you are running. This button will call a web service in the ADefHelpDesk Upgrade Advisor module that uses the following method to determine the current version of ADefHelpDesk that is installed:
DesktopModuleInfo objModule =
if (objModule != null)
response = objModule.Version;
The module will only allow you to continue if ADefHelpDesk is installed.
Next, the module uses the version number of the currently installed ADefHelpDesk, to call the web service on ADefHelpDesk.com, to get the issues that have been documented that exist when upgrading between the current version and the latest version of ADefHelpDesk.
In this example there is only one issue. The ADefHelpDesk.com web service instructs the ADefHelpDesk Upgrade Advisor module to check for the existence of the CurrentPage column on the LastSearch table.
When checking for the existence of classes you can't directly instantiate them because the Upgrade module would not install in the DotNetNuke site if the class it was checking for did not exist. Therefore you would use code such as this that attempts to dynamically load the class it is looking for:
var TheClass = BuildManager.GetType(
var TheTable = TheClass.Module.GetTypes().Where(
x => x.Name == "ADefHelpDesk_LastSearch");
var TheField = TheTable.FirstOrDefault().GetProperties().Where(
y => y.Name.Contains("CurrentPage"));
if (TheField.FirstOrDefault() != null)
response = true;
The module will display the results of all tests.
A Proof Of Concept
This module is just a proof of concept but it can be used as a starting point for your own Upgrade Advisor module if you need one. All the source code is available at this link.
You can try out the Upgrade Advisor module live on http://ADefhelpDesk.com (you have to log in and then click on the Upgrade Advisor tab). You can also download the DotNetNuke module and install it on your own site. you can get the module here:
Requires ASP.net 3.5 SP1 or higher on the server
If using DotNetNuke 4, You must download, install, place on a page in your DotNetNuke website, and run LinqPrep first. You can obtain it here: http://www.adefwebserver.com/DotNetNukeHELP/Misc/LinqPrep/
Note: in IIS you will also need to set the MIME Type: Setting .xap MIME Type for Silverlight 2.0