Sollten sich AppV Anwendungen unter Citrix nicht mehr starten lassen, und stattdessen erhält man eine Fehlermeldung mit dem Titel „Citrix XenDesktop“ bzw. „Citrix XenApp“ und dem Meldungstext „Start nicht möglich [App Name]“ bzw. „Cannot start [app name]“, dann ist ein möglicher Grund, dass im AppV Cache eine korruptes Paket enthalten ist, dieses korrupte Paket bringt den AppV Client so durcheiandern, dass keinerlei AppV Anwendung mehr startbar ist. Ein Paket kann z.B. dann korrupt sein wenn es innerhalb des Paketes mehrere Versionen und Manifestdatei gibt, die durch kopieren eine doppelte Versionsnummer haben. Der Fehler äußert sich auch dahingehen, dass der PowerShell Befehl „Get-AppvClientPackage -All“ nicht mehr wie erwartet funktioniert sondern folgenden Fehler liefert:
Get-AppvClientPackage : Der angeforderte Vorgang konnte im Application Virtualization-Dienst nicht durchgeführt werden.
Vorgang versucht: Pakete abrufen.
AppV-Fehlercode: 0600000011.
Fehler – Modul: Catalog. Details zum internen Fehler: 86B0BB0600000011.
Weitere Informationen finden Sie im AppV Client-Ereignisprotokoll.
In Zeile:1 Zeichen:1
+ Get-AppvClientPackage -all
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidResult: (:) [Get-AppvClientPackage], ClientException
+ FullyQualifiedErrorId : GetPackagesError,Microsoft.AppV.AppvClientPowerShell.GetAppvPackage
Im Windows EventLog findet man zu dem Fehler folgenden Eintrag:
Quelle: Microsoft-AppV-Client
Ereignis-ID: 102
Beschreibung: IAppVClient::GetPackages COM method exited. Unbekannter Fehler
Lösen lässt sich das Problem dadurch, dass man das korrupte Paket identifiziert und aus dem AppV Cache entfern, dies ist mit folgendem kleinen PowerShell Script möglich:
$Catalog = "C:\Programdata\Microsoft\AppV\Client\Catalog\Packages"
Foreach($Package in (Get-ChildItem $Catalog)){
Foreach($Version in (Get-ChildItem (Join-Path $Catalog $Package.Name))){
$VersionID = $($Version.Name).Trim("{","}")
$PackageID = $(($Package.Name).Trim("{","}"))
$Manifest = "$Catalog\$($Package.Name)\$($Version.Name)\Manifest.xml"
[xml]$Content = Get-Content $Manifest
if((($Content.Package.Identity.VersionId).toUpper()) -ne $VersionID){
Write-Host "Manifest: $Manifest"
$corruptPackageFound = $true
}
}
if ($corruptPackageFound) {
Write-host "Remove problematic package from cache"
Foreach($Version in (Get-ChildItem (Join-Path $Catalog $Package.Name))){
$VersionID = $($Version.Name).Trim("{","}")
$PackageID = $(($Package.Name).Trim("{","}"))
Remove-AppvClientPackage -PackageId $PackageID -VersionId $VersionID
}
}
$corruptPackageFound = $false
}