In DNN 3.0.13 we implemented a security enhancement for new installations which results in a change to the MachineKey settings in the web.config. The MachineKey settings are used by the MemberRole component for encrypting users passwords... but if every DNN installation was using the same MachineKey value, it really defeats the purpose of encrypting the passwords in the first place ( since they could easily be decrypted ).
To implement this feature, we needed to modify the auto upgrade logic significantly. On a new install ( determined by calling GetUpgradeStatus ), the application will perform a 2 stage install procedure. The first stage opens the web.config file, creates some random keys of the correct byte length using the CryptoRNG namespace, inserts these values into the MachineKey values in AppSettings, and saves the web.config. This action triggers an application re-start. When the application restarts, it still determines it is a new installation, so it proceeds to the second stage where it provisions the database, etc...
The logic to modify the MachineKey should never be happening on an upgrade unless the GetUpgradeStatus is returning the wrong result ( in which case I think there would be other problems as well since the clean installation scripts would be re-executed ). Anyways, to trouble shoot the problems in this thread, I would like to understand why the GetUpgradeStatus would return UpgradeStatus.Install for some people when it should be returning UpgradeStatus.Upgrade.
Shaun Walker
Perpetual Motion Interactive Systems Inc.
http://www.dotnetnuke.com