You might see the following exception when trying to start your Reporting Services instance:

System.ServiceProcess.TimeoutException: Time out has expired and the operation has not been completed.
at System.ServiceProcess.ServiceController.WaitForStatus(ServiceControllerStatus desiredStatus, TimeSpan timeout)
at ReportServicesConfigUI.Panels.ConfigurationPanelWithErrors.StartOrStopServiceTask(Boolean start, String serviceName)



When you look inside of your ReportServerService logs in the LogFiles folder for Reporting Services, you’ll see the following error:

appdomainmanager!323c!06/15/2018-18:09:08:: e ERROR: Appdomain:1 DefaultDomain failed to initialize. Error: System.UnauthorizedAccessException: Access to the registry key ‘Global’ is denied.
at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
at Microsoft.Win32.RegistryKey.InternalGetValue(String name, Object defaultValue, Boolean doNotExpand, Boolean checkSecurity)
at Microsoft.Win32.RegistryKey.GetValue(String name)
at System.Diagnostics.PerformanceMonitor.GetData(String item)
at System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item)
at System.Diagnostics.PerformanceCounterLib.get_CategoryTable()
at System.Diagnostics.PerformanceCounterLib.CategoryExists(String machine, String category)
at System.Diagnostics.PerformanceCounterCategory.Exists(String categoryName, String machineName)
at Microsoft.ReportingServices.Diagnostics.Utilities.RSCounter.Init(String categoryName, String counterName, String instanceName, RSTrace tracer, Boolean resetCounter)
at Microsoft.ReportingServices.Diagnostics.Utilities.PerformanceCounters.Init(Boolean resetCounters, String instanceName, RunningApplication runningApplication)
at Microsoft.ReportingServices.Diagnostics.Globals.InitServerWithoutDumperInner(Boolean resetAllPerfCounters)
at Microsoft.ReportingServices.Diagnostics.Globals.InitServer(Boolean resetAllPerfCounters)
at Microsoft.ReportingServices.Library.ServiceAppDomainController.StartInternal(Object parentThread).
appdomainmanager!50c0!06/15/2018-18:09:08:: e ERROR: Windows service failed to start. Exception: System.Exception: Default appdomain failed to initialize.
at Microsoft.ReportingServices.Library.ServiceAppDomainController.Start()
at Microsoft.ReportingServices.Library.ReportService.OnStart(String[] args)



In Event Viewer Application logs, you’ll see the following errors:

The application domain DefaultDomain failed to initialize. Error: Access to the registry key ‘Global’ is denied..

Service cannot be started. System.Exception: Default appdomain failed to initialize.
at Microsoft.ReportingServices.Library.ServiceAppDomainController.Start()
at Microsoft.ReportingServices.Library.ReportService.OnStart(String[] args)
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)



You may have seen similar service start timeouts for SSRS noted in the past, like https://blogs.msdn.microsoft.com/mariae/2012/11/12/reporting-services-service-doesnt-start-after-the-installation-of-ms12-070-security-patch/, but this is not it.



The issue is more related to the following blog: https://blogs.msdn.microsoft.com/distributedservices/2014/02/21/system-unauthorizedaccessexception-access-to-the-registry-key-global-is-denied/



Resolution

Ensure that your SSRS Service Account is added as part of the Performance Monitor Users group and Performance Log Users group in the Local User and Group settings. Run lusrmgr.msc to open the Local Users and Groups console. Search for those 2 groups in Groups, and add your SSRS Service Account.

Since I was using the ‘Virtual Service Account’ for my SSRS instance, I grabbed the exact user account used from SQL Server Configuration Manager for my SSRS instance. ‘NT Service\ReportServer$SQL2016’





Since those are local accounts, make sure that when you are adding permissions, you search for those accounts from the local machine location.



Once those permissions were added for my SSRS Service Account, my SSRS instance came up without issues.