マシンにインストールされているアプリケーションのリストを収集する win32 デスクトップ アプリケーションがあります。通常、ハイブをアンインストールしてアプリケーション リストを収集します (これは、コントロール パネルがプログラムの追加と削除のリストにデータを入力する方法と似ています)。Windows 8 ストア アプリでは、ストア アプリはデスクトップ アプリと同じように保存されないため、これは機能しなくなりました。このソース コードEnumerate app packages by user SID sampleを見つけることができます。Windows 8でテストしましたが、うまく機能します。ただし、落とし穴があります。
Windows CRT と静的にリンクできるようにしたいので、この単純な exe と共に CRT を配布する必要はありません (必要な CRT が顧客のマシンにインストールされるとは想定できませんでした。加えて、夜間のビルド環境はまだ VS2005 です。これは開発者のマシンでのみビルドでき、VS の更新または Windows の更新の一部として CRT のバージョンを更新でき、顧客のマシンよりも CRT のバージョンが高くなります)。現在のソリューションでは、コードがプライベート サイド バイ サイド アセンブリ (VS2005 上) としてビルドされた CRT バージョンが出荷されます。ただし、Windows 8 の WinRT では、CRT ライブラリを静的にリンクできませんでした (古い CLI/C++ にも同じ制限があります)。
サンプル コードでは、 Windows 8 (WinRT) で新しく導入されたPackageManagerを使用します。WinRT を使用せずにこの情報を取得する方法が他にないか考えてみてください。私の直感では「いいえ」ですが、質問しても問題ありません。
ちなみに、VS 2012 でビルドされた exe の埋め込みマニフェストには、次のように VS2005 でビルドされた exe のように、CRT 用のdependentAssembly がまったくないことに気付きました。
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.6195" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>