I recently worked on a case where SharePoint sites would not load after rebuilding the SharePoint Farm and utilizing an existing server. I’m blogging this issue is because the root cause and solution was very obscure, and the error presented on the site is totally misleading. If you came here because you are experiencing this error, I hope this blog helps you resolve the issue.
Problem Description
Unable to load SharePoint site with the following error.
An unexpected error has occurred.
Web Parts Maintenance Page: If you have permission, you can use this page to temporarily close Web Parts or remove personal settings. For more information, contact your site administrator.
Example:
Cause
This error has nothing to with Web Parts, if you look at the unexpected error from ULS, you will find the following stack trace.
08/07/2019 14:05:15.46 w3wp.exe (0x0ED4) 0x0FCC SharePoint Foundation Runtime tkau
System.InvalidOperationException: Stand-alone provisioning has failed because an error occurred while enumerating the SharePoint Server products installed on this server.
at Microsoft.Office.Server.EvaluatorModeProvisioning.OfficeServerProducts.get_OfficeProductList()
at Microsoft.Office.Server.EvaluatorModeProvisioning.OfficeServerProducts.IsInstalled(OfficeServerProductToProvision product)
at Microsoft.Office.Server.Administration.SetupLicensing.get_InstalledOfficeServersProduct()
at Microsoft.Office.Server.Administration.SearchHelper.get_IsSearchSKU()
at Microsoft.SharePoint.Portal.WebControls.SearchBoxEx.OnPreRender(Object sender, EventArgs e)
at System.Web.UI.Control.OnPreRender(EventArgs e)
at Microsoft.SharePoint.WebPartPages.WebPart.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
This error is simply stating that SharePoint is in the process of reading what products are installed and if they are properly licensed. However, the process of reading these products from the registry failing, which is causing the site load failure and not a misconfigured or improperly installed product.
So what does the get_OfficeProductList() function actually do?
Simply put, it reads installed products from the registry via key “HKEY_CLASSES_ROOT\Installer\Products” to verify the product version and license. If it fails to read a key during the enumeration, the web page will fail to load with the error discussed above.
How can you determine which key is problematic?
Simple… use PROCMON – https://aka.ms/procmon
This tool will allow you to set filters and get a deeper look into what is happening behind the scenes when Files, Processes, Network and Registry items are accessed.
In this case, we now know that the key “HKEY_CLASSES_ROOT\Installer\Products” is being read, so let’s add a filter of “Path, Contains, Installer\Products”
Example:
Now access your site and check inspect the output from PROCMON.
Example:
If you look at last key that was accessed by W3WP, you will see it matches the index that is reported from “Verbose” ULS logs.
Example:
ULS:
08/07/2019 14:55:23.51 w3wp.exe (0x0ED4) 0x0FCC SharePoint Server Setup and Upgrade apiu Verbose Return code from MsiEnumProducts for index 77 is 1610 257bd1b6-2b20-4292-8293-c8fe29871566
08/07/2019 14:55:23.51 w3wp.exe (0x0ED4) 0x0FCC SharePoint Server Setup and Upgrade apiu Verbose NativeMethods.MsiEnumProducts failed with error 1610, index 77 257bd1b6-2b20-4292-8293-c8fe29871566
PROCMON:
2:50:48.9433302 PM w3wp.exe 3796 RegCloseKey HKCU\Software\Microsoft\Installer\Products SUCCESS
2:50:48.9433425 PM w3wp.exe 3796 RegCloseKey HKCR\Installer\Products SUCCESS
2:50:48.9433949 PM w3wp.exe 3796 RegOpenKey HKCR\Installer\Products SUCCESS Desired Access: Read
2:50:48.9434126 PM w3wp.exe 3796 RegEnumKey HKCR\Installer\Products SUCCESS Index: 77, Name: 0357DD412DCC89733BD78393DEA644C1-old
2:50:48.9434304 PM w3wp.exe 3796 RegCloseKey HKCR\Installer\Products SUCCESS
Open the last line in PROCMON and you will be able to copy the name of the key into your clipboard.
Now search the registry for this key. Notice it contains a “-old” at the end of key. The “-old” means a product may have been reinstalled on the same server. If you find this key is duplicated, with a different product key that does not contain a “-old”, it’s safe to delete the key.
Please Note: ALWAYS make a backup of the registry before making any changes.
Now that I deleted the key, I continued to use PROCMON while loading the site to see if other keys are causing this issue.
Sure enough, another one was found:
3:08:29.8283866 PM w3wp.exe 3796 RegOpenKey HKCR\Installer\Products SUCCESS Desired Access: Read
3:08:29.8283962 PM w3wp.exe 3796 RegEnumKey HKCR\Installer\Products SUCCESS Index: 79, Name: 04583E7B553E3053FA7D36B5F2F2671E-old
I repeated this process until all problematic keys were deleted.
Resolution
This problem was resolved by deleting the duplicate product registry keys that contained a “-old” in the of the product GUID key within “HKCU\Software\Microsoft\Installer\Products”.
Once all duplicate product keys registry were deleted from “HKCU\Software\Microsoft\Installer\Products” the Sharepoint site loaded without error.
Summary
The main cause in this case was the presence of the “-old” in the key name. The function to read the registry was failing to read keys that contain the ‘-‘ in the name. However, deleting the key may not be the best option if the product is not duplicated, so please ensure that there is another key with the same GUID that does not contain the “-old” before deleting the key.
I hope you find this blog useful but be very careful when modifying the Windows Registry. If you are not comfortable with performing this action or do not fully understand what is needed, please contact Microsoft support and reference this blog.
Welcome to the SharePoint Blog! Learn best practices, news, and trends directly from the SharePoint team.