Kurz notiert: MS Edge Chromium auf Citrix Virtual Apps & Desktops serverbasierten Betriebssystemen.
Ein erster (und neugieriger) Kunde wollte gerne den neuen Edge Chromium in seiner CVAD 1912 LTSR Farm bereitstellen. Leider ist er dabei auf ein leeres, weißes Fenster und viele MSEdge.exe Prozesse gestoßen.
Ich nutze den neuen Microsoft Edge auf meiner dedizierten VM via „Remote PC Access“ und vermutete den Fehler vorerst auf dem Serverbetriebssystem. Ein kurzer Test auf einem guten, alten (nicht Citrix) Terminalserver ergab allerdings einen funktionierenden Edge. Etwas Recherche im Citrix Forum später brachte die Erleuchtung: „Citrix API Hooks“
Key: HKLM\SYSTEM\CurrentControlSet\services\CtxUvi
Value Name: UviProcessExcludes
Type: REG_SZ
Value: badapp1.exe;badlongname.exe;badapp2.exe
Der Wert-Name „UviProcessExcludes“ enthält in der Regel bereits verschiedene „badapps.exe“. Hier sollte am Ende des Strings einfach „;msedge.exe;“ ergänzt werden. In meinem Fall sieht der Wert (der per GPP Registry auf die VDAs kommt) dann folgendermaßen aus:
Key: HKLM\SYSTEM\CurrentControlSet\services\CtxUvi
Value Name: UviProcessExcludes
Type: REG_SZ
Value: LsaIso.exe;BioIso.exe;FsIso.exe;sppsvc.exe;vmsp.exe;msedge.exe;
Update: Da mittlerweile eine Reihe weiterer Kunden auf den Microsoft Edge updaten, gibt es auch erste Probleme durch das komplette Deaktivieren des Hookings per „UviProcessExcludes“. Ein Beispiel wäre die gute alte DATEV SmartCard bzw. der DATEV mIDentity in einer Citrix Session. Hier hat sich herausgestellt, dass es ausreicht das „SfrHooking“ (Special Folder Redirection) für die „msedge.exe“ zu deaktivieren. Anbei ein kleines PowerShell Script, was die erste Mehtode (UviProcessExcludes) prüft und ggfs. korrigiert und dann die entsprechenden SfrHooks für den Edge setzt:
$RegUviProcExcl = Get-ItemPropertyValue `
-Path "HKLM:\SYSTEM\CurrentControlSet\Services\CtxUvi" `
-Name "UviProcessExcludes" `
-ErrorAction SilentlyContinue
if($RegUviProcExcl -match "msedge.exe;"){
Write-Output "Bereinige ""HKLM:\SYSTEM\CurrentControlSet\Services\CtxUvi"" REG_SZ ""UviProcessExcludes"""
$RegUviProcExcl = $RegUviProcExcl.Replace("msedge.exe;","")
Set-ItemProperty `
-Path "HKLM:\SYSTEM\CurrentControlSet\Services\CtxUvi" `
-Name "UviProcessExcludes" `
-Value $RegUviProcExcl |
Out-Null
} else{
Write-Output """msedge.exe;"" nicht in ""UviProcessExcludes"" gesetzt -> Ok."
}
if(Test-Path -Path "HKLM:\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\SfrHook"){
if(-not (Test-Path -Path "HKLM:\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\SfrHook\msedge.exe")){
Write-Output "Erstelle ""HKLM:\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\SfrHook\msedge.exe"""
New-Item `
-Path "HKLM:\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\SfrHook" `
-Name "msedge.exe" |
Out-Null
} else{
Write-Output """msedge.exe"" bereits in ""HKLM:\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\SfrHook"" gesetzt -> Ok."
}
} else{
Write-Output """HKLM:\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\SfrHook"" nicht vorhanden! Manuel prüfen!"
}
if(Test-Path -Path "HKLM:\SOFTWARE\WOW6432Node\Citrix\CtxHook\AppInit_Dlls\SfrHook"){
if(-not (Test-Path -Path "HKLM:\SOFTWARE\WOW6432Node\Citrix\CtxHook\AppInit_Dlls\SfrHook\msedge.exe")){
Write-Output "Erstelle ""HKLM:\SOFTWARE\WOW6432Node\Citrix\CtxHook\AppInit_Dlls\SfrHook\msedge.exe"""
New-Item `
-Path "HKLM:\SOFTWARE\WOW6432Node\Citrix\CtxHook\AppInit_Dlls\SfrHook" `
-Name "msedge.exe" |
Out-Null
} else{
Write-Output """msedge.exe"" bereits in ""HKLM:\SOFTWARE\WOW6432Node\Citrix\CtxHook\AppInit_Dlls\SfrHook"" gesetzt -> Ok."
}
} else{
Write-Output """HKLM:\SOFTWARE\WOW6432Node\Citrix\CtxHook\AppInit_Dlls\SfrHook"" nicht vorhanden! Manuel prüfen!"
}
Schreibe einen Kommentar