我使用 Shell Launcher V2 设置了一个自定义应用(win32,不是 UWP),以在运行 Windows 11 Enterprise 的计算机上作为 shell 运行。这很好用,但我需要从 shell 应用启动另一个 win32 应用。通常,我使用 shell:AppsFolder 获取另一个应用的 AUMID 并启动它。
问题是,shell:AppsFolder 仅在使用自定义 shell 时显示 UWP 应用程序,而在正常运行时(即使用普通资源管理器 shell),我会在 shell:AppsFolder 中获取所有已安装的程序(UWP 或其他)。
如何配置 Shell Launcher V2,以便在使用自定义 shell 运行时获取所有已安装的应用程序而不仅仅是 UWP 应用程序?
编辑:在对 shell 进行更多操作后,我将其更新到了某个程度。我尝试的操作包括运行 Windows 更新疑难解答、Windows 商店疑难解答,我修复并重置了商店应用程序,并添加了 Microsoft 帐户。
不确定是哪个操作导致了此问题,但现在 shell:AppsFolder 显示所有应用程序。但是,安装应用程序或删除应用程序(无论是 UWP 应用程序还是 win32 应用程序),shell:AppsFolder 均无反应。
我还尝试了其他方法,看看是否可以通过其他方式获取 AUMID,我发现在 Powershell 中运行Get-StartApps
或Get-AppxPackage
也不会列出新安装的应用程序、UWP 或其他应用程序,而当使用资源管理器作为 shell 运行时,它们会列出。
在使用自定义 shell 时,Windows 似乎根本不知道应用程序的安装/删除。是否有某个服务或未运行的程序会告知 Windows 应用程序的安装/删除时间?
答案1
尝试一下这些中的一些 - 我不确定当 shell 没有真正运行时什么都会更新:
# 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("")