WinGet-InProc.cpp (1811B)
1 #include <Windows.h> 2 3 #include <winrt/Microsoft.Management.Deployment.h> 4 #include <winrt/Windows.Foundation.Collections.h> 5 6 #include <iostream> 7 8 using namespace winrt::Microsoft::Management::Deployment; 9 10 const CLSID CLSID_PackageManager = { 0xC53A4F16, 0x787E, 0x42A4, 0xB3, 0x04, 0x29, 0xEF, 0xFB, 0x4B, 0xF5, 0x97 }; //C53A4F16-787E-42A4-B304-29EFFB4BF597 11 const CLSID CLSID_FindPackagesOptions = { 0x572DED96, 0x9C60, 0x4526, { 0x8F, 0x92, 0xEE, 0x7D, 0x91, 0xD3, 0x8C, 0x1A } }; //572DED96-9C60-4526-8F92-EE7D91D38C1A 12 13 // Simple RAII for COM initialization 14 struct ComInitialization 15 { 16 ComInitialization() 17 { 18 winrt::check_hresult(CoInitialize(nullptr)); 19 } 20 21 ~ComInitialization() 22 { 23 CoUninitialize(); 24 } 25 }; 26 27 // Lists all installed packages 28 int main() 29 { 30 ComInitialization comInitialization; 31 32 auto packageManager = winrt::create_instance<PackageManager>(CLSID_PackageManager, CLSCTX_ALL); 33 34 auto installedCatalogConnectResult = packageManager.GetLocalPackageCatalog(LocalPackageCatalog::InstalledPackages).Connect(); 35 if (installedCatalogConnectResult.Status() != ConnectResultStatus::Ok) 36 { 37 std::wcerr << L"Error connecting to catalog" << std::endl; 38 return E_FAIL; 39 } 40 auto installedCatalog = installedCatalogConnectResult.PackageCatalog(); 41 42 auto findOptions = winrt::create_instance<FindPackagesOptions>(CLSID_FindPackagesOptions, CLSCTX_ALL); 43 auto searchResult = installedCatalog.FindPackages(findOptions); 44 if (searchResult.Status() != FindPackagesResultStatus::Ok) 45 { 46 std::wcerr << L"Error finding packages" << std::endl; 47 return E_FAIL; 48 } 49 50 for (auto package : searchResult.Matches()) 51 { 52 std::wcout << L"Found package: " << package.CatalogPackage().Id().c_str() << std::endl; 53 } 54 }