Ich habe Shell Launcher V2 verwendet, um eine benutzerdefinierte App (Win32, nicht UWP) so einzurichten, dass sie als Shell auf einem Computer mit Windows 11 Enterprise ausgeführt wird. Das funktioniert einwandfrei, aber ich muss eine andere Win32-App von der Shell-App aus starten. Normalerweise verwende ich den Ordner shell:AppsFolder, um die AUMID der anderen App abzurufen und sie zu starten.
Das Problem besteht darin, dass shell:AppsFolder bei Verwendung der benutzerdefinierten Shell nur UWP-Apps anzeigt, während ich beim normalen Ausführen (d. h. mit der normalen Explorer-Shell) alle installierten Programme (UWP oder andere) in shell:AppsFolder erhalte.
Wie kann ich Shell Launcher V2 so konfigurieren, dass ich beim Ausführen mit der benutzerdefinierten Shell alle installierten Apps erhalte und nicht nur die UWP-Apps?
Bearbeiten: Nachdem ich noch ein bisschen mit der Shell herumgespielt hatte, brachte ich sie an einen Punkt, an dem sie aktualisiert wurde. Unter anderem habe ich versucht, die Problembehandlung für Windows Update und Windows Store auszuführen, die Store-App zu reparieren und zurückzusetzen und ein Microsoft-Konto hinzuzufügen.
Ich bin nicht sicher, welche dieser Aktionen es verursacht hat, aber jetzt zeigt shell:AppsFolder alle Apps an. Beim Installieren oder Entfernen einer App, sei es eine UWP-App oder eine Win32-App, reagiert shell:AppsFolder jedoch nicht.
Ich habe auch andere Dinge ausprobiert, um zu sehen, ob ich die AUMID auf andere Weise erhalten kann. Dabei habe ich festgestellt, dass beim Ausführen Get-StartApps
oder Get-AppxPackage
in Powershell auch neu installierte Apps (UWP oder andere) nicht aufgelistet werden, während dies beim Ausführen mit dem Explorer als Shell der Fall ist.
Es ist, als ob Windows bei Verwendung einer benutzerdefinierten Shell die Installation/Entfernung von Apps überhaupt nicht bemerkt. Gibt es einen Dienst oder etwas, das nicht ausgeführt wird und Windows mitteilt, wann Apps installiert/entfernt werden?
Antwort1
Probieren Sie einige davon aus – ich bin nicht sicher, was alles aktualisiert wird, wenn die Shell nicht wirklich ausgeführt wird:
# List the package class names for the user from the registry
# these should be closest to the actual packages list, but don't have ID as a property
$ActivatableClasses = (Get-ChildItem 'HKCU:\Software\Classes\ActivatableClasses\Package\').PSChildName
# this should get all the actual AppX AUMIDs
$AppxClasses = (Get-ItemProperty 'HKCU:\SOFTWARE\Classes\AppX*\Application').AppUserModelID
# starts a new shell com instance and asks it for the appx ID list - likely the same result as shell:AppsFolder
$ApplicationIDs = (New-Object -ComObject Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | % path
# more of a .net-specific way to do Get-AppxPackage
$packages = [Windows.Management.Deployment.PackageManager]::new().FindPackagesForUser("")