About InteractiveWebs

This blog is the combined blog work of the InteractiveWebs Dev Team. Together we work on a range of DotNetNuke (DNN) applications, modules, Silverlight, and Microsoft CRM Portal integration products. Our Business is website design and hosting, with a strong focus on DotNetNuke, Microsoft Dynamics CRM, Silverlight and iPhone iPad development.

Captivate SCORM reporting completed but not passed


Captivate SCORM Problems

We have been playing in depth lately with some some of the Captivate SCORM outputs in an effort to better understand the SCORM Compliance and where Captivate falls down in this area. What we have found is very interesting and needs to be explained in detail to understand.

The Problem

Until recently, anyone who wanted to author SCORM-compliant content had few choices. Not many authoring programs existed and the technical knowledge to create compliant content was and, in fact, still is beyond the reach of most training developers. Now there are many affordable, easy to use content authoring programs to create SCORM-compliant content that can be deployed to learning management systems (LMS). Adobe, a leader in the multimedia authoring and programming industry, has recently thrown their hat into the ring and released Adobe Captivate – a SCORM-compliant authoring tool that includes screen capture, simulation, automated testing and more.

Adobe Captivate and LMS Software Working Correctly

When exporting content from Adobe Captivate, you have the option of making your package SCORM 1.2 Compliant. Specifics of the SCORM specification could fill an entire book (in fact, it does!), so let’s just say that SCORM defines what must be included in a content package (certain files which contain certain information in a certain format) and the methods that the content package must use to communicate information (student name, score, etc.) to and from the LMS. The idea is that content authoring programs and learning management systems would all be programmed to comply with the spec and therefore be compatible with each other. Unfortunately, reality has not lived up to the vision.

The SCORM 1.2 specification is long, open to some interpretation and not always logical. Developers have had to make some assumptions and, at the same time, had to predict and hope that other developers made the same assumptions! Our experience with the workings of Adobe Captivate and the development or our own SCORM-compliant LMS has given us some insight to help you get the most out of Adobe Captivate and your LMS – even if it’s not our LMS! Note that we are only focusing on SCORM 1.2. The SCORM 1.3 specification was recently released, however most learning management systems and authoring tools, even those recently released, still support SCORM 1.2 and rightfully so.

Problem 1 – Setting Captivate to be SCORM 1.2 Compliant

If you export a Captivate package that does not have any graded questions in it, it will not be SCORM-compliant. I don’t mean that it just won’t track because it has no grade to send; I mean it is not compliant. In tracing method calls from Captivate lessons, we’ve found that a lesson with no questions will not make the required call to the LMS to initialize itself upon start-up. It will make the finalize call upon exit, however any compliant LMS will throw back an error when this happens. The spec dictates that a content package must initialize itself before it can finalize itself. Makes sense, right?

A tangential problem to this is that a lesson with no questions (even if the correct initialize and finalize calls are made) has no way to tell when it’s been completed, so it does not send that information to the LMS either. This secondary problem is not an issue of compliance as the SCORM specification does not require this information to be sent, but more an issue of usability. What’s the point of making a SCORM-compliant lesson and loading it into an LMS if you never find out when your users have completed it?

Solution 1 – Captivate SCORM Solved

The resolution to both these problems is easy – just make sure that you have a graded interaction in your lesson. It can be an interaction that is actually presented as such or even a button or hot spot that you are sure your users will click while viewing the lesson. The possibilities here are endless, so be sure to test your solution, but the bottom line is that there needs to at least one graded interaction in your lesson.

Problem 2 – Passing the Proper Lesson Status Value


Adobe Captivate lets you choose whether to report ‘pass/fail’ or ‘complete/incomplete’ values for lesson status, but this is not an arbitrary choice. The spec dictates that this shall be determined by the lesson after querying the LMS and deciding based upon the response it receives.

When publishing with Captivate, if you select complete/incomplete, and the user fails or fails to finish the lesson, the value of ‘incomplete’ will be reported to the LMS. In the event that the user completes or passes the lesson, the value of ‘complete’ will be reported to the LMS. Likewise, if you select pass/fail, then the value of ‘pass’ will be used instead of ‘complete’ and the value of ‘fail’ will be used instead of ‘incomplete’.

Additionally, Captivate lessons never query the LMS for the value of ‘credit’, which is the element that the lesson should be using to determine whether to use ‘complete/incomplete’ or ‘pass/fail’.

Problem 2 – Solution to Captivate Lesson Status Value

Solving this problem may or may not even be necessary – it’s a rather minor issue. The best thing to do is make sure that you coordinate the credit setting you use in the LMS with the lesson status value you select here. Lessons that are for credit should use ‘pass/fail’ and lessons that are not for credit should use ‘complete/incomplete’. However, one thing to note, and this takes us indirectly to Problem #3 and beyond, is that the spec dictates that the LMS revaluate the score and change this value if you have set a mastery score. We’ll come back to this when we get to Problem #4.

Problem 3 – Passing Score in the SCORM Format

The ‘Publish’ interface in Adobe Captivate lets you choose whether to report score as a raw value or as a percentage while the spec dictates that this value must be ‘normalized between 0 and 100′ (meaning it must be a percentage score). When you choose to report this value as a raw score, your lesson is not compliant.

Adobe tells us that they put this option for a very specific reason. The spec defines 3 values relating to score and all shall be normalized between 0 and 100 – minimum score, maximum score and what they call raw score (oddly enough, the spec calls it ‘raw score’ and at the same time dictates that it be normalized – no wonder everyone is confused!). Logically, since they are required to be normalized between 0 and 100, minimum score would always be 0 and maximum score would always be 100 so why even use them? Because of this confusion, Adobe decided to allow the content author to decide whether to report score as raw or normalized.

The problem occurs when you choose to report score as raw and then load your content into an LMS that has been implemented according to the SCORM spec because it will expect to receive score normalized. Confusion ensues!

You create a Captivate lesson and choose to report score as a raw value. Your lesson has 5 questions and your user gets them all correct. Your lesson is going to report ’5′ as the score and a compliant LMS is going to interpret this as 5%. Of course, your lesson should also report a lesson status of ‘complete’ or ‘passed’ (see problem #2) which will truly confuse your user when they look at their stats and see that they passed/completed a lesson with a score of only 5%!

Problem 3 – Solution to Passing SCORM Score Correctly

This is an easy one. Unless you are certain that your LMS implements score as a raw value, always select ‘percentage’ to ensure that your lesson is compliant.

Problem 4 – Making it all Work

image  image

Take a deep breath, because problem #4 might get a little confusing. The SCORM specification instructs the LMS to change the lesson status (the same value discussed in problem #2) when certain conditions apply. When this happens, the LMS shall use the score to decide how to change the lesson status value. If you remember though, from problem #3, you may be reporting score as a non-compliant raw value, so the LMS may change the lesson status based on bad information.

To get a better understanding of this, let’s introduce mastery score. You set the mastery score by clicking the ‘Manifest’ button on the Publish Interface. mastery score is value stored in the manifest file that is included in the content package you load into the LMS. The LMS reads this value and stores it with the lesson. If you notice, Captivate instructs that this value should be between 0 and 100, or normalized.

Now the SCORM specification instructs the LMS that if mastery score is set, the lesson is being taken for credit and the lesson status is not ‘incomplete’, the LMS shall change the lesson status to the appropriate value (complete, incomplete, pass or fail) by comparing the score reported from the lesson and the mastery score that is defined in the manifest. This occurs even if the lesson has already passed a value for lesson status.

The first thing to notice is that you probably should set the mastery score to the same value that you set passing score. That way, if the LMS re-evaluates the lesson status, it will use the same value as the passing score that the lesson itself does.

Now let’s refer back to Problem #3. You had the option of reporting score as a raw value. If you chose that option, when the LMS performs this re-evaluation of lesson status, it is going to compare a raw score to the normalized mastery score. Since one value is normalized and the other is not, it should be clear that you will have some unexpected results from this.


You create a Captivate lesson with 20 questions. You choose to report score as a raw value (non-complaint per Problem #3, but Captivate lets you do it), choose to use ‘pass/fail’ for lesson status, enter a mastery score of 80% and enter a passing score of 80%. Your user gets 17 questions correct.

When the lesson finalizes, the lesson reports ‘pass’ to the LMS for lesson status and ’17′ for score. Everything looks good until the LMS sees that there is a mastery score and therefore it must re-evaluate the lesson status. The LMS looks at score (’17′) and sees that it is less than mastery score (’80′), so it changes lesson status to ‘fail’. In fact, a lesson created with these settings will always have its lesson status re-evaluated to ‘fail’ by the LMS because even a perfect raw score (’20′) will always be less than the mastery score (’80′).

The root of the problem is that Captivate prompts you to enter mastery score normalized, but gives you the option to report score as a raw value. They need to be on the same scale for the re-evaluation by the LMS to work properly.


Solution 1 – Don’t enter a mastery score. By doing this, the LMS will not re-evaluate the lesson status and you avoid the problem altogether. But don’t forget about Problem #3 and its solution.

Solutions 2 – Make sure that mastery score and score are both normalized by choosing to report score as a ‘percentage.’ You’ll notice that this is also the solution to Problem #3. If you have confirmed that your LMS expects to receive score as raw, then use Solution #3.

Solution 3 – If you must report score as a raw value, then be sure to enter a raw value for mastery score. In our scenario, instead of entering ’80′ for mastery score, you would enter ’17′. That way, when the LMS re-evaluates lesson status, both score and mastery score are on the same scale and the calculation is done correctly. While technically incorrect since the spec dictates that mastery score be normalized, we won’t worry about it because you’d only use this solution in the case that your LMS is also non-compliant because it’s expecting raw values for score. It’s a workaround.


We’ve seen that Adobe Captivate provides a robust solution for quickly developing online training solutions. But let’s not forget that we need to be mindful of the implementation of the SCORM specification by the LMS and how it’s going to react to our Captivate lessons.

Review the problems and their solutions and you can be sure that your Captivate lessons are going to comply with SCORM 1.2 and function properly when loaded into a SCORM 1.2-compliant learning management system.

Remote Desktop mstsc.exe slow will not start windows 7

Had a painful problem today with the mstsc.exe application in Windows 7 64 Bit Ultimate today.


An otherwise happy install suddenly failing to start, or if is started it would be very slow.

Once started, it would not close from the task manager, even if I killed the process with the end process.


I suspected that it was possibly a virus etc. However I found that there are a lot of people on the net with this exact problem.

I then set about a solution, and figured on out myself, that involves replacing some of the files use by the MSTSC.EXE application.

Basically there are 4 files that I replaced with the same version from another computer that was functional and healthy. They are:








I would create a .zip copy for download except I fear giving out some stored connection settings in the files I already have. So sorry, you will have to find your own backup files.


The Bitch of it

The annoying problem is that you cannot just copy the 4 files into the two folder locations as Windows 7 in all it’s wisdom will not let you copy files there, as you are not the “Trusted Installer”.

You might be like me, Administrator and God of your computer that at any time can take to it with a hammer and replace it with a Mac, but Windows 7 knows best… so let’s show you what you have to do to hack that crap!


Give Permissions

First, go to the folder or set of files that you need to change permissions for, right-click on them and choose Properties.


Next click on the Security tab and then click on the Advanced button at the bottom:


Next click on the Owner tab and you’ll now see that the current owner is TrustedInstaller.


Now click on the Edit button and choose who you would like to change the owner to, either your account or the Administrators. If your account is an Administrator account, I would suggest just picking Administrators.


You can also check off Replace owner on sub containers and objects if you need to delete more than one file in a folder. Go ahead and click OK. Now you will see that the Current owner is the account you picked.


Click OK until you have closed all properties windows and are back to the Windows Explorer screen. Then right-click on the folder or file again and choose Properties again.

Now click on the Security tab again, but instead of clicking on Advanced, you need to click the Edit button.


Now click on the user name in the list that you want to change the permissions for, which should be the same as who you changed the current owner too. If the user name is not in the list, click Add, type in the name and click OK.


Since I had changed the current owner to Administrators, I clicked on Administrators here and then clicked on the check box next to Full Control. When you do that, all the other boxes get checked too.

Click OK once and then click OK one more time to get back to Windows Explorer. Now you can replace those files without any UAC messages telling you that you can’t! Enjoy!

Disable SSL 2.0 IIS 7 Windows 2008 64bit with CRM 2011 for PCI Compliance

PCI Failure

Today we received notification during a PCI compliance check that our Microsoft CRM 2011 server was not PCI Compliant.


The cause of the lack of compliance was due to the server accepting connections via an SSL v 2.0 protocol.

Synopsis : The remote service encrypts traffic using a protocol with known
weaknesses . Description : The remote service accepts connections encrypted
using S S L 2.0, which reportedly suffers from several cryptographic flaws and has
been deprecated for several years . An attacker may be able to exploit these
issues to conduct man-in-the-middle attacks or decrypt communications between
the affected service and clients . See also : http://www.schneier.com/p

Download File – ZipSource

Solution: Consult the application’s documentation to dis able S S L 2.0 and us e
S S L 3.0 or TLS 1.0 instead. Risk Factor: Medium / CVS S Bas e S core : 2

Perhaps not the worlds biggest deal, as the SSL certificates in place are using the SSL 3.0 however we needed to remove the V2.0 for compliance with PCI.

The solution turned out to be no so easy… Mostly due to the fact that we are using a 64bit Windows 2008 server and Microsoft have only appeared to provide details on fixing 32 bit servers to remove SSL v2.

We did manage to get there and this is what we had to do

Remove SSL v2

You need to run the following commands at a command prompt on the server:

REG ADD “HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 2.0\Server” /v Enabled /t REG_DWORD /d 0 /f
REG ADD “HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 2.0\Client” /v Enabled /t REG_DWORD /d 0 /f
REG ADD “HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 3.0\Server” /v Enabled /t REG_DWORD /d 1 /f
REG ADD “HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 3.0\Client” /v Enabled /t REG_DWORD /d 1 /f
REG ADD “HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.0\Server” /v Enabled /t REG_DWORD /d 1 /f
REG ADD “HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.0\Client” /v Enabled /t REG_DWORD /d 1 /f

We created a batch file to make this easier.

You can download the file here, and extract the batch file. Then double click the file called: “DisableSSLv264bit.bat”.

Then Reboot the server.

Download File – DisableSSLv264bit

All it will do is run the above commands and in the registry it will add:


and similar sets to enable SSL v3 and disable SSL v2.

Then you can use a free test service here:


to check that you are disabled.

A failure like this: http://foundeo.com/products/iis-weak-ssl-ciphers/test.cfm


indicates something did not take correctly.

If you are using a 32 bit version of windows. (Not possible with CRM 2011) but possible otherwise, then you can use the Microsoft tool here: http://support.microsoft.com/kb/187498/en-us

Invalid data reported–Analytics Report


We have found an issue that would prevent the Google Analytics report module from rendering in certain websites under certain conditions.

The symptoms of the issue are that the module reports “invalid data” when you have configured the module settings.


If you experience this error messages, then the solution is easy…

Ensure you have a version of the module that is later than 45.06.02 – Available from our website as a download here: http://www.interactivewebs.com/DotNetNukeModules/ModuleDownloads.aspx

Then after updating, you need to check the option that says: “Render Chart from Control”


This should allow the chart to report past the Invalid data error.

The error relates to the DotNetNuke Alias redirection settings in the DNN Site Admin settings, and appears to be when a redirection has been defined in the settings.


If the redirection is turned to none, this should also fix the error.

Alternatively it appears to have been fixed in DotNeTNuke release 06.01.01. But who is to day that the issue will not creep into later releases of the module.

Chrome–An additional plug-in is required to display some elements on this page–Solved

Install Plug-in


If you are receiving this error in Chrome, and finding that installing the plugin does absolutely nothing.

And clicking the":


Takes you to a Windows media and Java error page.



Which if you bother to follow the instructions will not help you at all.

The cause

Almost certainly the cause of this problem is going to be a recent update by Skype. One could posture that it did not take long after the Microsoft purchase for Skype to become annoying, but I am saddened to say that I thin they have buggered it up without needing to call anyone from the Vista development team.


The most recent update of Skype adds a little feature to your browsers (without asking you) that reads numbers that look like phone numbers and allows you to click and call them in Skype.

It also adds a little blue Skype thing to the top of you page:


The Solution

So the fix to stop Chrome asking you about installing a plug-in all the time is to disable the Skype plugin in Chrome.

1. Click the spanner


2. Tools \ Extensions

3. Un-tick the Skype Extension


That should be all you need to do to stop Skype mucking up your browser.



It is bad practice for Skype or anyone to add invasive features such as this that “take over” your experience without making it clear in the install process that this is being done. Skype did it in the past then dropped the idea. Not sure why they have returned to it, but it sucks!

I remember the annoying days of Real Player and their invasive installs that totally bombarded you with their crappy experience. I hope that Skype is not taking that path.

Interestingly the only other plugin that I found installed in Chrome that I was not asked specifically if I wanted installed was a RealPlayer extension.


Funny that!~

Problem Upgrading for DNN 4.9.5 to DotNetNuke 6x

During an update from DNN 4.9.5 to DNN 6x we experienced:

All pages with HTML blank when logged out, but show this error logged in.


Error: Services is currently unavailable.DotNetNuke.Services.Exceptions.ModuleLoadException: The type initializer for ‘DotNetNuke.Modules.Html.DataProvider’ threw an exception. —> System.TypeInitializationException: The type initializer for ‘DotNetNuke.Modules.Html.DataProvider’ threw an exception. —> System.InvalidCastException: Unable to cast object of type ‘DotNetNuke.Modules.HTML.SqlDataProvider’ to type ‘DotNetNuke.Modules.Html.DataProvider’. at DotNetNuke.Modules.Html.DataProvider.CreateProvider() — End of inner exception stack trace — at DotNetNuke.Modules.Html.WorkflowStateController.GetWorkflows(Int32 PortalID) at DotNetNuke.Modules.Html.HtmlTextController.GetWorkflow(Int32 ModuleId, Int32 TabId, Int32 PortalId) at DotNetNuke.Modules.Html.HtmlModule.OnInit(EventArgs e) — End of inner exception stack trace —


In our case, the upgrade left 2 things behind that DNN 6 did not like.

  1. in the app_code directory, we deleted the ‘HTML’ folder (since it does not seem that it was in use anymore and was potentially conflicting with new html module code)
  2. in web.config, I removed the following line in the <Codesubdirectories> section
    <add directoryName="HTML" />

Save and you are done.

DotNetNuke 6 running in .Net 4.0 Server Error in ‘/’ Application Version= Version=


We had a requirement today to run a DotNetNuke Website in .Net 4.0 as some code we are using as part of the Microsoft CRM 2011 SDK require .Net 4.0.

Problem is that with many of the DotNetNuke websites, they have some references that will cause this error when you flip your website worker process to 4.0. in IIS.


This will give you an error that looks like this:



Generates an error:

Server Error in ‘/’ Application.

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS1703: An assembly with the same identity ‘System.Web.Extensions, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ has already been imported. Try removing one of the duplicate references.
Source Error:

[No relevant source lines]

Source File: Line: 0

Show Detailed Compiler Output:


Interestingly too the reference to Version= initially said Version- until the second page refresh on the error.

The Problem

The problem in our case, and it may differ with others, related to an older file for Microsoft Ajax.

There is a file called: System.Web.Extensions.dll

in the \bin    folder.

We renamed this to: System.Web.Extensions.dll.bak

And our problem was fixed.

This is due to an older way that Microsoft handled Ajax vs the new way in .Net 4.0.


DotNetNuke Support Services

We do offer DotNetNuke support services and would be happy to assist others with this or other DNN problems that need professional support services with.


Migrate from IIS 7.0 to IIS 7.5 in a new Windows 2008 R2 Server


Moving from one IIS 7.0 server to IIS 7.5 is relatively easy and there are a number of tools that can assist you. Probably the best is the Web Deploy tool mentioned here:

This tool can allow you to package up and migrate the entire web sites, including configuration and database files etc.

Because our IIS 7 server is almost dead, it prevented us from configuring the tool. The install files see .Net 2.0 as required, and although it was installed we were unable to get the server to see it as installed. Anyway we tried all sorts of things, and finally gave up. (Good opportunity to rag on Microsoft, but we will leave that alone).

So now we find a need to migrate without the good tools.


We shared the IIS root folder on the source server. Then pulled all the folders containing websites across from that server to the same location on the new server.

In IIS manager, you need to export the config from the already-configured server. In IIS manager, click the Server node, and go to Shared Configuration under Management.


We then clicked to Export – on the right.


Enter the path you’d like to export the config to, and set an encryption key password:


Note: One thing here that is a real BITCH is that they make you select a pass that is so complex you absolutely have to write it down. We never suggest writing down passwords but they are out of control in what they make you do with this.

Copy administration.config, applicationHost.config, and configEncKey.key to your new server to a temp location.

On the new server, go back to the “Shared Configuration” section and check “Enable shared configuration.” Enter the location in physical path and click “Apply.” It should prompt for the encryption password that you had set. Enter it, and reset IIS.


After resetting IIS (command prompt “iisreset”), go back to Shared Configuration and uncheck “Enable shared configuration.” Click apply. You should see this:


Click YES and it will import all of the settings from your Shared Config into the local config on your new IIS server.

At this point, all you should need to do is change your server-specific site bindings, and it should be good to go.


How to add binding information to a site
  1. Open Internet Information Services (IIS) Manager:
    • If you are using Windows Server 2008 or Windows Server 2008 R2:
      • On the taskbar, click Start, point to Administrative Tools, and then clickInternet Information Services (IIS) Manager.
    • If you are using Windows Vista or Windows 7:
      • On the taskbar, click Start, and then click Control Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, expand the server name, expand Sites, and then click the Web site on which you want to configure the bindings.
  3. In the Actions pane, click Bindings…
  4. In the Site Bindings dialog box, click Add..



5. In the Add Site Binding dialog box, add the binding information, and then click OK.


CRM 2011 Server Error 404 – File or directory not found

Cannot Access CRM 2011 site 404

Something strange that we have encountered with CRM 2011 is a 404 – File or directory not found error.

What is particularly strange about this one is that the error happens from IE 9 on one computer, but the same URL and site loads correctly with another browser on another computer AND loads correctly to the authentication screens on the same computer but with a different browser.

Go figure right!



Microsoft show it as:


So what is the Solution?

We tried a number of things that did not work, and we will not bother to list them all, but interesting the clearing the browser history and cache etc does not fix it but is needed to fix it.

1. Clear history and cache in the browser:

2. Close the Browser entirely

3. Navigate to C:\Windows\Temp and delete everything in that directory.

4. From this screen, got to browser history settings:

Then View Files:


5. Takes you to this location: C:\Users\XXUSERXX\AppData\Local\Microsoft\Windows\Temporary Internet Files

6. Close Outlook and IE.

7. Delete Everything in that folder that it will allow you to delete. Some files are in use and not able to be deleted.

8. Start IE, and away you go.. you should be able to access the site again.


IE really does suck as a browser, it is a real same and the worst thing about CRM 2011 is that they make you use this junk browser.

Setting Mushroom Lite Template for DNN 6x Default Skin

DotNetNuke 6x has a great looking default skin called DarkKnight, and the skin design has previously caused some layout issues with the Mushroom Light Module Templates.

To correct this, we have created two new templates that are designed specifically to work with the DarkKnight skin in DotNetNuke.


  • DarkKnight-Small
  • DarkKnight-Large

They produce the following results…


With the Large template being the content on the left, and the bottom right showing the content of the small template.

This makes the module perfect for use with DotNetNuke 6x our of the box.


How to Set the Templates

The templates are selected through the normal RSS Template Tab in the module.

1. Select Load Template Button


2. Select the appropriate template and press the select button.


That will load the new templates and be ready to use on your site.