none
Start menu not coming up, Server 2016 RDS

    Question

  • A few users are experiencing this problem.

     

    Event ID: 5973

    Activation of app Microsoft.Windows.Cortana_cw5n1h2txyewy!CortanaUI failed with error: The remote procedure call failed. See the Microsoft-Windows-TWinUI/Operational log for additional information.

     

    And event ID: 1000

    Faulting application name: ShellExperienceHost.exe, version: 10.0.14393.2125, time stamp: 0x5a990817
    Faulting module name: Windows.UI.Xaml.dll, version: 10.0.14393.2125, time stamp: 0x5a9909e5
    Exception code: 0xc000027b
    Fault offset: 0x00000000006d710b
    Faulting process id: 0x6b78
    Faulting application start time: 0x01d3c1fbf1890ced
    Faulting application path: C:\Windows\SystemApps\ShellExperienceHost_cw5n1h2txyewy\ShellExperienceHost.exe
    Faulting module path: C:\Windows\System32\Windows.UI.Xaml.dll
    Report Id: 7c1dae0b-eec7-416c-b5c9-5148b1bc7ba6
    Faulting package full name: Microsoft.Windows.ShellExperienceHost_10.0.14393.2068_neutral_neutral_cw5n1h2txyewy
    Faulting package-relative application ID: App

     

    When this happens the start menu will not work. This corresponds with me enabling the roaming of C:\Users\user\AppData\Local

     

    I'm wondering if there is a folder I should exclude from roaming.

     

    If it's not being caused by roaming the local folder then it may be caused by some GPO settings I also changed. I did this because windows search was out of control and consuming too many resources. Unfortunately I cannot disable search completely because of Outlook. My discussion on Outlook and search I had to re enable indexing outlook.

     

    Any guidance on this is appreciated.

     

    So far the only fix I've come up with is temporary, which is to delete the local profile and on the next login the start menu works. After a day or 2 it stops working again. I haven't totally recreated the user profile and I'm hoping this is not the ultimate fix because that would be a PITA to have to do that for all the users that have this happen.





    • Edited by jlongjr Thursday, March 22, 2018 5:12 PM
    Thursday, March 22, 2018 5:08 PM

All replies

  • Hi,

    Please try the powershell command to register the configuration files:

    Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}

    Regards

    Simon


    If you find that my post has answered your question, please mark it as the answer. If you find my post to be helpful in anyway, please click vote as helpful. Regards Simon Disclaimer: This posting is provided AS IS with no warranties or guarantees, and confers no rights.

    Thursday, March 22, 2018 6:15 PM
  • Hi,

    I want to confirm with you if such problem happens recently? Is there any change before problem happens, such as new installation, configuration change?

    Best Regards,
    Eve Wang

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    Friday, March 23, 2018 10:22 AM
    Moderator
  • This is happening because we moved to Exchange online/O365 and had to start caching mailboxes on our RDS (terminal servers). I started seeing performance issues because of search and so I made the group policy changes to try to fix this, basically limit what windows search is doing. It helped tremendously but now I have this side effect.

    I also had to start roaming the AppData\Local folder as well. So there may be some files or folders that I need to exclude from roaming to help fix the start menu issue.

    Eve, I think you saw my other post about Outlook modern authentication freezing. This is the other half of that discussion. There are some folders and files that are in the AppData\Local folder that when roamed with the user solve the authentication problem when logging into an RDS session across multiple servers.

    Is there an documentation on what folders in the AppData\Local folder play a role in the start meun and/or windows search?

    Thanks,

    John

    Tuesday, March 27, 2018 2:33 PM
  • We have been running a production 2016 RDS with Multiple Session hosts for a year or so now, and came across this and the black screen issue every month consistently.   Our environment consists of 1 x WebAccess, Gateway, Licensing, Broker and 4 x Session Hosts.  1 Collection with UPD.

    Our only mitigation against this happening was to rebuild all the session hosts before they had been in production for one month.  So each of the 4 Session hosts would be replaced with fresh templates one a week over the month.   Performance progressively got worse as the month went on till eventually at around 1 month of a host being online, it would exhibit the black screens, and/or start menu not working,  Initially when these started happening a reboot would fix it, but eventually (within days) it would black screen and you cant log on at all (even at the console)

    After much time spent trying to figure out what was causing the issue, we finally came across a thread here about firewall rules getting created every single time a new user logged onto one of the session hosts.  As this RDS environment is used fairly heavily daily, we would end up with over 7000 new firewall rules getting added to each session host on a daily basis.  Each new firewall rule that gets added when a user logs on did not get cleaned up at logoff.

    We've since started running a Scheduled Task daily on each session host which deletes all these Firewall Rules, and since then, we've not had a single server requiring a reboot, performance has remained the same as a freshly deployed session host, logins don't slow down, no more black screens, no more start menu not working.

    We do regularly patch our servers, so I cant say for certain that this is the fix/workaround for these issues.  But it certainly has worked for us.   Still hoping MS get a fix out for this some time soon.

    I don't take credit for the script and I cant remember who posted it, but my version has a few slight changes in it.  Doesn't need a lot of the write-host and write-progress stuff in it if you run this as a scheduled task, but it does look alittle prettier when you manually run it in powershell.

    $profiles = get-wmiobject -class win32_userprofile cls Write-Host "`n`n`n`n`n`n`n`n" Write-Host "Getting Firewall Rules..."

    $Rules1 = Get-NetFirewallRule -All | Where-Object {$profiles.sid -notcontains $_.owner -and $_.owner } $Rules1Count = $Rules1.count Write-Host "" $Rules1Count "Rules`n" Write-Host "Getting Firewall Rules from ConfigurableServiceStore Store..." $Rules2 = Get-NetFirewallRule -All -PolicyStore ConfigurableServiceStore | Where-Object { $profiles.sid -notcontains $_.owner -and $_.owner } $Rules2Count = $Rules2.count Write-Host "" $Rules2Count "Rules`n" $Total = $Rules1.count + $Rules2.count Write-Host "Deleting" $Total "Firewall Rules:" -ForegroundColor Green $Result = measure-command { $start = (Get-Date) $i = 0.0 foreach($rule1 in $Rules1){ # action remove-itemproperty -path "HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules" -name $rule1.name # progress $i = $i + 1.0 $prct = $i / $total * 100.0 $elapsed = (Get-Date) - $start $totaltime = ($elapsed.TotalSeconds) / ($prct / 100.0) $remain = $totaltime - $elapsed.TotalSeconds $eta = (Get-Date).AddSeconds($remain) # display $prctnice = [math]::round($prct,2) $elapsednice = $([string]::Format("{0:d2}:{1:d2}:{2:d2}", $elapsed.hours, $elapsed.minutes, $elapsed.seconds)) $speed = $i/$elapsed.totalminutes $speednice = [math]::round($speed,2) Write-Progress -Activity "Deleting Rules1 ETA $eta elapsed $elapsednice loops/min $speednice" -Status "$prctnice" -PercentComplete $prct -secondsremaining $remain } foreach($rule2 in $Rules2) { # action remove-itemproperty -path "HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\Configurable\System" -name $rule2.name # progress $i = $i + 1.0 $prct = $i / $total * 100.0 $elapse = (Get-Date) - $start $totaltime = ($elapsed.TotalSeconds) / ($prct / 100.0) $remain = $totaltime - $elapsed.TotalSeconds $eta = (Get-Date).AddSeconds($remain) # display $prctnice = [math]::round($prct,2) $elapsednice = $([string]::Format("{0:d2}:{1:d2}:{2:d2}", $elapsed.hours, $elapsed.minutes, $elapsed.seconds)) $speed = $i/$elapsed.totalminutes $speednice = [math]::round($speed,2) Write-Progress -Activity "Deleting Rules2 ETA $eta elapsed $elapsednice loops/min $speednice" -Status "$prctnice" -PercentComplete $prct -secondsremaining $remain } } $end = get-date write-host end $end write-host eta $eta write-host $result.minutes min $result.seconds sec

    NOTE:  There is a powershell commandlet Remove-NetFirewallRule, though it is VERY slow, so I'm using the remove-itemproperty command to delete the registry keys as it works a lot faster.   And considering it is clearing 7000+ rules daily for me, it would takes ages to run otherwise.

    I'm interested to hear if this actually works for other people with these issues or it is something else entirely causing it.

    Cheers




    • Edited by LapuLapu Wednesday, March 28, 2018 12:30 AM typo
    • Proposed as answer by Naures Friday, November 23, 2018 8:41 AM
    Tuesday, March 27, 2018 11:22 PM
  • I had this issue on 2 RDS Session hosts for a client and Looked through every page on Google that references the issue on Server 2016 and couldn't find a fix that worked.  I had seen LapuLapu's post on the first day that I looked and ran the powershell script and while it sped up the server it didn't fully fix the issue for me.

    I have been looking into this for a month and spent 10 hours on the phone with Microsoft support and we have eventually resolved the issue.  Here is the additional fix that we had to apply:

    Symptoms

    When a user’s profile is deleted on Windows Server 2016, either with User Profile Disk or with standard profile, there is no call to remove the “AppContainer” created when users connected first time. This leaks/generates registry bloat for fire rules in the registry.   The registry bloat is in the following registry key:

    HKLM\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\Configurable\System

    Over time, this registry bloat can cause the following symptoms:

    • Server hang
    • Slow performance
    • Slow Logons
    • Black screen when logging in
    • Inability to launch start menu or Cortana

    This behavior is not limited to RDS however RDS scenarios using UPD may have greater impact given profiles are removed by default on user disconnect for UPD.

    Please Manually backup (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-export)

    and then delete registry firewall rules from HKLM\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\Configurable\System(https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-delete)

    The command is like below:

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

    reg delete HKLM\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\Configurable\System /va

    I have scheduled two task that run each day in the evening.  The first is the LapuLapu script and the second is the reg delete command.  I found that I was unable to backup the reg key first as the server would lock up as the key was too big but running the command has had no negative effect.

    The first time that you run this you will need to sign out then back in again as the start menu wont work until you sign out.

    I really hope that this helps some other folks out there as I lost years on my life on this issue..

    Cheers




    • Proposed as answer by Naures Friday, November 23, 2018 8:41 AM
    Monday, August 20, 2018 11:02 PM
  • LapuLapu, This actually works! I've experienced exactly the same issues. I've raised a case @Microsoft which confirmed this solution/workaround. I've received an official "Microsoft Powershell Script" incl. executable that basically does the same as your script. They have confirmed that this is a BUG, and that there will be a BugFix.
    Friday, November 23, 2018 8:53 AM
  • LapuLapu, This actually works! I've experienced exactly the same issues. I've raised a case @Microsoft which confirmed this solution/workaround. I've received an official "Microsoft Powershell Script" incl. executable that basically does the same as your script. They have confirmed that this is a BUG, and that there will be a BugFix.
    Would you care to share the official Microsoft script? I need to use this in production and pitching an "official" script would be easier.
    Friday, January 11, 2019 2:10 PM
  • LapuLapu, This actually works! I've experienced exactly the same issues. I've raised a case @Microsoft which confirmed this solution/workaround. I've received an official "Microsoft Powershell Script" incl. executable that basically does the same as your script. They have confirmed that this is a BUG, and that there will be a BugFix.

    Second the request above for the Microsoft office script... Any way you can provide?

    Thanks!

    Wednesday, February 20, 2019 1:31 AM
  • Hi Naures,

    Could you please share the official script and exe?

    Thursday, February 21, 2019 2:44 PM
  • Hi, see link for the files! Use it @ your own risk and responsibility! https://1drv.ms/f/s!Aswzm2OgLj-ugtgxvyMfzUg4koSCWA
    Tuesday, February 26, 2019 11:23 PM
  • LapuLapu, This actually works! I've experienced exactly the same issues. I've raised a case @Microsoft which confirmed this solution/workaround. I've received an official "Microsoft Powershell Script" incl. executable that basically does the same as your script. They have confirmed that this is a BUG, and that there will be a BugFix.

    This is a promising development. I am stlightly cautious to apply this 'fix' to our production environment. But am very interested in the potential official 'BugFix' for this issue.

    Thing is how to register interest for when this is likely to be released?

    Friday, March 15, 2019 3:22 PM
  • We have been running a production 2016 RDS with Multiple Session hosts for a year or so now, and came across this and the black screen issue every month consistently.   Our environment consists of 1 x WebAccess, Gateway, Licensing, Broker and 4 x Session Hosts.  1 Collection with UPD.

    Our only mitigation against this happening was to rebuild all the session hosts before they had been in production for one month.  So each of the 4 Session hosts would be replaced with fresh templates one a week over the month.   Performance progressively got worse as the month went on till eventually at around 1 month of a host being online, it would exhibit the black screens, and/or start menu not working,  Initially when these started happening a reboot would fix it, but eventually (within days) it would black screen and you cant log on at all (even at the console)

    After much time spent trying to figure out what was causing the issue, we finally came across a thread here about firewall rules getting created every single time a new user logged onto one of the session hosts.  As this RDS environment is used fairly heavily daily, we would end up with over 7000 new firewall rules getting added to each session host on a daily basis.  Each new firewall rule that gets added when a user logs on did not get cleaned up at logoff.

    We've since started running a Scheduled Task daily on each session host which deletes all these Firewall Rules, and since then, we've not had a single server requiring a reboot, performance has remained the same as a freshly deployed session host, logins don't slow down, no more black screens, no more start menu not working.

    We do regularly patch our servers, so I cant say for certain that this is the fix/workaround for these issues.  But it certainly has worked for us.   Still hoping MS get a fix out for this some time soon.

    I don't take credit for the script and I cant remember who posted it, but my version has a few slight changes in it.  Doesn't need a lot of the write-host and write-progress stuff in it if you run this as a scheduled task, but it does look alittle prettier when you manually run it in powershell.

    $profiles = get-wmiobject -class win32_userprofile cls Write-Host "`n`n`n`n`n`n`n`n" Write-Host "Getting Firewall Rules..."

    $Rules1 = Get-NetFirewallRule -All | Where-Object {$profiles.sid -notcontains $_.owner -and $_.owner } $Rules1Count = $Rules1.count Write-Host "" $Rules1Count "Rules`n" Write-Host "Getting Firewall Rules from ConfigurableServiceStore Store..." $Rules2 = Get-NetFirewallRule -All -PolicyStore ConfigurableServiceStore | Where-Object { $profiles.sid -notcontains $_.owner -and $_.owner } $Rules2Count = $Rules2.count Write-Host "" $Rules2Count "Rules`n" $Total = $Rules1.count + $Rules2.count Write-Host "Deleting" $Total "Firewall Rules:" -ForegroundColor Green $Result = measure-command { $start = (Get-Date) $i = 0.0 foreach($rule1 in $Rules1){ # action remove-itemproperty -path "HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules" -name $rule1.name # progress $i = $i + 1.0 $prct = $i / $total * 100.0 $elapsed = (Get-Date) - $start $totaltime = ($elapsed.TotalSeconds) / ($prct / 100.0) $remain = $totaltime - $elapsed.TotalSeconds $eta = (Get-Date).AddSeconds($remain) # display $prctnice = [math]::round($prct,2) $elapsednice = $([string]::Format("{0:d2}:{1:d2}:{2:d2}", $elapsed.hours, $elapsed.minutes, $elapsed.seconds)) $speed = $i/$elapsed.totalminutes $speednice = [math]::round($speed,2) Write-Progress -Activity "Deleting Rules1 ETA $eta elapsed $elapsednice loops/min $speednice" -Status "$prctnice" -PercentComplete $prct -secondsremaining $remain } foreach($rule2 in $Rules2) { # action remove-itemproperty -path "HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\Configurable\System" -name $rule2.name # progress $i = $i + 1.0 $prct = $i / $total * 100.0 $elapse = (Get-Date) - $start $totaltime = ($elapsed.TotalSeconds) / ($prct / 100.0) $remain = $totaltime - $elapsed.TotalSeconds $eta = (Get-Date).AddSeconds($remain) # display $prctnice = [math]::round($prct,2) $elapsednice = $([string]::Format("{0:d2}:{1:d2}:{2:d2}", $elapsed.hours, $elapsed.minutes, $elapsed.seconds)) $speed = $i/$elapsed.totalminutes $speednice = [math]::round($speed,2) Write-Progress -Activity "Deleting Rules2 ETA $eta elapsed $elapsednice loops/min $speednice" -Status "$prctnice" -PercentComplete $prct -secondsremaining $remain } } $end = get-date write-host end $end write-host eta $eta write-host $result.minutes min $result.seconds sec

    NOTE:  There is a powershell commandlet Remove-NetFirewallRule, though it is VERY slow, so I'm using the remove-itemproperty command to delete the registry keys as it works a lot faster.   And considering it is clearing 7000+ rules daily for me, it would takes ages to run otherwise.

    I'm interested to hear if this actually works for other people with these issues or it is something else entirely causing it.

    Cheers




    Creating the following reg key will delete the firewall rules without the need to run a script:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy
    DeleteUserAppContainersOnLogoff
    REG_DWORD
    1

    https://support.microsoft.com/en-ca/help/4467684/windows-10-update-kb4467684

    Tuesday, March 19, 2019 8:50 PM