Я использовал Shell Launcher V2 для настройки пользовательского приложения (win32, не UWP) для запуска в качестве оболочки на машине с Windows 11 Enterprise. Это работает нормально, но мне нужно запустить другое приложение win32 из приложения оболочки. Обычно я использую shell:AppsFolder, чтобы получить AUMID другого приложения и запустить его.
Проблема в том, что shell:AppsFolder показывает только приложения UWP при использовании пользовательской оболочки, тогда как при обычном запуске (т. е. с обычной оболочкой проводника) я получаю все установленные программы (UWP или другие) в shell:AppsFolder.
Как настроить Shell Launcher V2 так, чтобы при работе с пользовательской оболочкой я получал все установленные приложения, а не только приложения UWP?
Редактировать: Поигравшись с оболочкой еще немного, я довел ее до точки, где она обновилась. Среди вещей, которые я пробовал, был запуск средства устранения неполадок обновления Windows, средства устранения неполадок магазина Windows, я восстановил и сбросил приложение магазина и добавил учетную запись Microsoft.
Не уверен, какое из этих действий вызвало это, но теперь shell:AppsFolder показывает все приложения. Однако при установке или удалении приложения, будь то приложение UWP или приложение win32, shell:AppsFolder не реагирует.
Я также пробовал другие способы, чтобы узнать, можно ли получить AUMID другими способами, и обнаружил, что при запуске Powershell Get-StartApps
или Get-AppxPackage
в нем также не отображаются недавно установленные приложения, UWP или другие, тогда как при запуске с проводником в качестве оболочки они отображаются.
Как будто Windows вообще не знает об установке/удалении приложений при использовании пользовательской оболочки. Есть ли служба или что-то, что не запущено, но сообщает Windows об установке/удалении приложений?
решение1
Попробуйте некоторые из них — я не уверен, что именно обновляется, когда оболочка на самом деле не запущена:
# 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("")