winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

WinGet-OutOfProc.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 }