-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Comparing changes
Open a pull request
base repository: microsoft/winget-cli
base: v1.12.170-preview
head repository: microsoft/winget-cli
compare: v1.12.210-preview
- 7 commits
- 92 files changed
- 2 contributors
Commits on Aug 25, 2025
-
Improve COM static store usage (#5680)
## Issue The use of the COM static store was causing crashes on long lived processes because the implementation of `DllCanUnloadNow` did not count those objects, nor did it clean them up. This led to our module being unloaded, then when it was reloaded, the recreation of the static store object would invoke the deletion of the old one, which was pointing to the old, unloaded module location. ## Design Considerations WindowsPackageManager.dll serves many purposes, making the lifetime of statics complex. - It serves as "in-proc" for the CLI - It is the core implementation for the in-proc COM - It is the core implementation for the OOP COM In order to support in-proc COM, we must put static lifetime COM objects in the static store. But in order to support unloading, we must also clean them up. Additionally, we don't want to claim to be in use if the only active objects are our statics (which are typically just event handlers and their owners). We already use the WRL object count to track OOP COM server lifetime, and similarly we use it to implement `DllCanUnloadNow`. This is the count externally owned objects; those that the client has requested directly or indirectly. ## Change The major change is to remove all of our static store objects when WRL says we have no more externally owned. This is achieved by tracking the names of the objects that we insert and attempting to remove them when appropriate. The original change to use the static store was templatized and reused to hold the termination signal handler. ## Validation The new test uses the CLI to validate that the implementation for `DllCanUnloadNow` (`WindowsPackageManagerInProcModuleTerminate`) detects the unload state and properly destroys the relevant objects. This is done by checking that there are internal objects allocated before the call, but none after.
Configuration menu - View commit details
-
Copy full SHA for dabd473 - Browse repository at this point
Copy the full SHA dabd473View commit details
Commits on Aug 27, 2025
-
Update schema to 1.12 with Font InstallerType (#5687)
* Updates schema to 1.12 and adds type "font" as a valid InstallerType and NestedInstallerType in the schema. * Adds InstallerType Font to the manifest and associated Enum conversions. * Updated some of the NestedInstaller validation that had assumed Portable type as the only type that could have multiple installer files (fonts can also have many fonts in a package). * Added validation for 1.12 fonts in the manifest and associated tests for the schema version. This PR does not add any functional support for Fonts, only the validation and schema update so the new schema can be used and is valid in the related WinGet tooling. Tested: * Passed the AppInstallerCLITests with [ManifestValidation] and ensured a clean result. * Added new tests for the v 1.12 manifest updated with the new installer types in the test installer manifest to ensure Fonts are correctly passing the validation. Closes #5686 <!-- To check a checkbox place an "x" between the brackets. e.g: [x] --> - [x] I have signed the [Contributor License Agreement](https://cla.opensource.microsoft.com/microsoft/winget-pkgs). - [x] I have updated the [Release Notes](../doc/ReleaseNotes.md). - [x] This pull request is related to an issue. -----
Configuration menu - View commit details
-
Copy full SHA for 9bb4aa4 - Browse repository at this point
Copy the full SHA 9bb4aa4View commit details -
Download MS Store package for target OS (#5689)
Fixes #4996 ## Change Adds the ability to specify the target OS version for downloads from the Microsoft Store. This is achieved by filtering the set of applicable platforms in `GetSfsPackageFileSupportedPlatforms` further than the existing platform targeting. Now they must also have a minimum specified OS version >= the target OS version. `winget.exe download` has a new parameter `--os-version`. This is a UINT64 version (4 part version with 2^16-1 maximum value for each part) that should be given as the target OS version. COM `DownloadOptions` has a new property `TargetOSVersion`, which is a string of the same format as above. PowerShell `Export-WinGetPackage` has a new parameter `-TargetOSVersion`, which is also a string of the same format. Also added the previously implemented options to skip the license download (`--skip-license`) and the target platform (`--platform`) to COM (`SkipMicrosoftStoreLicense` and `Platform`) and PowerShell (`-SkipMicrosoftStoreLicense` and `-Platform`).
Configuration menu - View commit details
-
Copy full SHA for bc7a073 - Browse repository at this point
Copy the full SHA bc7a073View commit details -
Fixes #5259 ## Change Register the configuration class names in the manifest to support proper activation (not C++/WinRT fallback behavior). Change the configuration link inputs to use the older `icu*.dll` files rather than the one that comes in the umbrella of `onecoreuap.lib` [`icu.lib`].
Configuration menu - View commit details
-
Copy full SHA for 2a5443a - Browse repository at this point
Copy the full SHA 2a5443aView commit details
Commits on Aug 28, 2025
-
Add RestSource and tests for Manifest v1.12 (#5695)
Closes #5694 Updates the RestSource and interface to support v1.12 Manifest schema. * Added Manifest 1.12 Schema to the Rest source and support for the new installer type. * Added tests for v1.12 rest source. * Added unit tests for WinGetUtilInterop for the v1.12 merged manifest and validating the new installertype. Tested: * WinGetUtilInterop Unit tests passed, verified in debugger that the new v1.12 manifest and manifest properties were being tested and validated. * AppInstallerCLITests for [RestSource] and the new [Interface_1_12] both pass. <!-- To check a checkbox place an "x" between the brackets. e.g: [x] --> (This is part of schema update for 1.12 so nothing new to add to release notes.) - [x] I have signed the [Contributor License Agreement](https://cla.opensource.microsoft.com/microsoft/winget-pkgs). - [x] I have updated the [Release Notes](../doc/ReleaseNotes.md). - [x] This pull request is related to an issue. -----
Configuration menu - View commit details
-
Copy full SHA for ddb86d4 - Browse repository at this point
Copy the full SHA ddb86d4View commit details
Commits on Aug 30, 2025
-
Improve slow searches involving installed items (#5701)
Fixes #5629 (and probably quite a few more list/upgrade some-query-provided performance related issues) While things could still be made better, the good case (where files were already cached locally) of the previous behavior trying to complete `winget list Micro` was taking 51 seconds. With this change, it takes 6 seconds on the debug build. Given that there is intentionally little to no I/O and much of the CPU time is likely spent in our code, that should speed up more with the release. ## Issue The indexed `IPackage` implementation for v2 needed to acquire the intermediate manifest to provide the response for `GetVersionKeys`. Since this is used extensively to perform correlation between available packages and local items during a search, any available packages found by the query would then result in a download/disk read of the intermediate manifest. ## Change Introduces `IPackage::GetMultiProperty`, allowing code that just wanted to get all of these values across all versions to do so more efficiently. For the v2 index, this is how the data is already stored in the database. For the other `IPackage` implementations, the data was also present and is just aggregated from each version's output.
Configuration menu - View commit details
-
Copy full SHA for 4c85f5b - Browse repository at this point
Copy the full SHA 4c85f5bView commit details -
Shorter default installer log filename (#5705)
## Change Make `OutputTimePoint` more flexible by allowing arbitrary fields and behaviors to be requested via flags. Shorten the default installer log filename by removing the leading `WinGet-` and dropping the milliseconds. Some installers use the log file path as a base with no error handling to ensure a valid path is produced. Anything we can remove means more likely success.
Configuration menu - View commit details
-
Copy full SHA for f33b402 - Browse repository at this point
Copy the full SHA f33b402View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v1.12.170-preview...v1.12.210-preview