Essentials 2012 R2 Dashboard Fails with .NET 4.6 and 4.7

On an Essentials 2012 R2 machine, I have a dashboard alert that I need to ignore. But when I try to ignore the alert, the green bar just runs from left to right for minutes or longer and the alert is never ignored.

Essentails Dashboard Alert 1

Also, the dashboard crashes sometimes with these errors:

Log Name:      Application
Source:        .NET Runtime
Date:          2/8/2018 12:00:46 PM
Event ID:      1026
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Description:
Application: Dashboard.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentException
   at System.Drawing.Font.GetHeight(System.Drawing.Graphics)
   at System.Drawing.Font.GetHeight()
   at System.Drawing.Font.get_Height()
   at System.Windows.Forms.Control.get_FontHeight()
   at System.Windows.Forms.Control.get_FontHeight()
   at System.Windows.Forms.TextBoxBase.get_PreferredHeight()
   at System.Windows.Forms.TextBoxBase.AdjustHeight(Boolean)
   at System.Windows.Forms.TextBox.OnFontChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnParentFontChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnFontChanged(System.EventArgs)
   at Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailItemControl.OnFontChanged(System.EventArgs)
   at System.Windows.Forms.Control.set_Font(System.Drawing.Font)
   at Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailsPane.OnCreateItemControls(Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailItem, System.Windows.Forms.Control)
   at Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailsPane.AddDetailsGroup(Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailsGroup)
   at Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailsPane.ReinitializeGroups()
   at Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailsPane.OnLayout(System.Windows.Forms.LayoutEventArgs)
   at System.Windows.Forms.Control.PerformLayout(System.Windows.Forms.LayoutEventArgs)
   at Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailsPane.EndUpdate()
   at System.Collections.CollectionBase.Clear()
   at Microsoft.WindowsServerSolutions.Dashboard.Forms.Controls.Details.DetailsView.DetailsWorkComplete(System.Object, Microsoft.WindowsServerSolutions.Dashboard.Forms.Work.WorkCompleteArgs)

Exception Info: System.Reflection.TargetInvocationException
   at System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])
   at System.Delegate.DynamicInvokeImpl(System.Object[])
   at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry)
   at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry)
   at System.Windows.Forms.Control.InvokeMarshaledCallbacks()
   at System.Windows.Forms.Control.WndProc(System.Windows.Forms.Message ByRef)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr, Int32, IntPtr, IntPtr)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
   at System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
   at Microsoft.WindowsServerSolutions.Dashboard.Program.Main(System.String[])

----------------------------------------------------------------------------------

Log Name:      Application
Source:        Application Error
Date:          2/8/2018 12:00:46 PM
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Description:
Faulting application name: Dashboard.exe, version: 6.3.9600.17393, time stamp: 0x54333ee9
Faulting module name: KERNELBASE.dll, version: 6.3.9600.18666, time stamp: 0x58f33794
Exception code: 0xe0434352
Fault offset: 0x00000000000095fc
Faulting process id: 0x598
Faulting application start time: 0x01d3a10a3533932f
Faulting application path: C:\Windows\system32\Essentials\Dashboard.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: c02be501-0d0a-11e8-815a-fc4dd4d2c17c
Faulting package full name: 
Faulting package-relative application ID: 

.NET Issue

See the December 24, 2020 update at the bottom of this post for a simple workaround if you need to keep .NET up to date.

A conversation with Microsoft partner support reminded me that I had encountered a similar dashboard issue back in 2016, Can’t Remove Essentials Computer. The culprit was .NET 4.6.1, which had to be removed. At the time, I used a registry key to block the installation of .NET 4.6.1. However, that did not block subsequent installations of .NET 4.7 (KB3186539) on June 17, 2017 or .NET 4.7.1 (KB4033369) on January 13, 2018.

Follow this article to determine which .NET version you have installed.

I uninstalled KB4033369 and rebooted to remove .NET 4.7.1. This left .NET at version 4.7. But the problem was still there:  I could not ignore the alert.

Next I uninstalled KB3186539 and rebooted to remove .NET 4.7. This left .NET at version 4.5.2. (Remember, I previously blocked, 4.6.1.) This time, I was able to ignore the alert in under one second.

Conclusion

The Essentials 2012 R2 dashboard is incompatible with .NET versions after 4.5.2. I will now be blocking the installation of all .NET versions after 4.5.2:

4.6.1:  https://support.microsoft.com/en-us/help/3133990

4.6.2:  no KB article, but I’m following the same approach

4.7:  https://support.microsoft.com/en-us/help/4024204

4.7.1:  https://support.microsoft.com/en-us/help/4052152

4.7.2: https://support.microsoft.com/en-us/help/4342394

So my HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\WU registry key now looks like this:

Essentials Dashboard Alert 2

Of course this means I also have to remember to block all future installations of .NET if I want to keep using the Essentials dashboard.

.NET 4.5.2 was released on May 5, 2014, almost four years ago. Hopefully Microsoft will update the Essentials 2012 R2 dashboard to work with more recent versions of .NET.

Update July 17, 2018 Added info on blocking .NET 4.7.2, which was added to Windows Update this month.

Update May 17, 2019 Added block for .NET 4.8, released May 10, 2019.

Registry export (paste into a .reg file to import):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\WU]
"BlockNetFramework461"=dword:00000001
"BlockNetFramework462"=dword:00000001
"BlockNetFramework47"=dword:00000001
"BlockNetFramework471"=dword:00000001
"BlockNetFramework472"=dword:00000001
"BlockNetFramework48"=dword:00000001 

Add your vote to the UserVoice issue here:
https://windowsserver.uservoice.com/forums/295047-general-feedback/suggestions/33352786-update-essentials-2012-r2-dashboard-to-be-compatib

Possible workaround (untested):  use the My Server 2012 R2 app to manage the server:
https://www.microsoft.com/en-us/p/my-server-2012-r2/9wzdncrfjb14

A similar issue exists with Server 2016. See this post:
https://www.mcbsys.com/blog/2018/06/essentials-2016-dashboard-fails-with-net-4-7-1/

Update December 24, 2020

I am once again struggling to delete an alert on an Essentials 2012 R2 machine. On this server, the latest .NET is required because it hosts QuickBooks. I found this workaround posted by Bob on November 8, 2018 on the UserVoice thread mentioned above:

“To ignore an alert, first try to delete it, cancel, then ignore it. Presto! Conversely, to delete an alert, first try to ignore it, cancel, then delete it.”

Amazing! It works. It seems if you cancel one failed action, then choose the opposite action, it will succeed.

11 thoughts on “Essentials 2012 R2 Dashboard Fails with .NET 4.6 and 4.7

  1. Alan C

    For blocking I have two options DWORD Value 32 or DWORD Value 64. Which do I select???

  2. Marcos C

    Thank you for taking time and writing this up!

  3. Barry T

    Has this been fixed yet? Thank you for sharing the W/A!

  4. Ryan

    Thank you so much for this!

    This was driving me nuts on my WD DS5100 Server 2012 R2 Essentials Server!

    After following this guide it is working flawlessly. Not sure how / why Microsoft could leave this broken for this long!

  5. Art

    The solution someone came up with was to delete an alert, first ignore it, close the endless dialog then delete it. And visa versa.

  6. Joe

    is there any update on this? is this still an issue?

  7. Mark Berry Post author

    Joe – no fix to my knowlege. See and follow the uservoice link three comments back.

  8. Ryan Lewandowski

    Thanks so much for blogging about this issue. Without this I would have been dead in the water on this annoying bug. It is helpful that you keep updating it with workarounds as times goes on. The newest workaround from December you posted works like a charm. I was able to update my 2012 Eseentials WD 5100 server to .NET 4.8. Thanks!

  9. Mark Berry Post author

    @Ryan, glad it helped. Your comment made me realize I should mention the latest workaround near the top of the post so people can skip all the other kludges!

Leave a Reply

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail. You can also subscribe without commenting.