Shell Launcher V2 を使用して、Windows 11 Enterprise を実行しているマシンでシェルとして実行するカスタム アプリ (UWP ではなく win32) をセットアップしました。これは問題なく動作しますが、シェル アプリから別の win32 アプリを起動する必要があります。通常は、shell:AppsFolder を使用して他のアプリの AUMID を取得し、起動します。
問題は、カスタム シェルを使用しているときに shell:AppsFolder に UWP アプリのみが表示されるのに対し、通常どおり実行している場合 (つまり、通常のエクスプローラー シェルを使用している場合)、インストールされているすべてのプログラム (UWP またはその他) が shell:AppsFolder に表示されることです。
カスタム シェルで実行するときに、UWP アプリだけでなく、インストールされているすべてのアプリを取得するように Shell Launcher V2 を構成するにはどうすればよいですか?
編集: シェルをもう少しいじってみたところ、更新できるようになりました。試したことの中には、Windows Update のトラブルシューティング ツールと Windows ストアのトラブルシューティング ツールの実行、ストア アプリの修復とリセット、Microsoft アカウントの追加などがあります。
これらのアクションのどれが原因かはわかりませんが、現在、shell:AppsFolder にはすべてのアプリが表示されます。ただし、UWP アプリでも win32 アプリでも、アプリをインストールまたは削除すると、shell:AppsFolder は反応しません。
Get-StartApps
また、他の方法で AUMID を取得できるかどうか試してみたところ、Powershell で を実行しても、新しくインストールされたアプリ (UWP など) はリストされないことがわかりましたGet-AppxPackage
。一方、エクスプローラーをシェルとして実行すると、リストされます。
カスタム シェルを使用すると、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("")