winget-cli

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

commit 9adff248590f339fa7c86eb2353fe2f52c56234b
parent 9087ac7c75421d1ae0ee01fe37c219dc8ac52a36
Author: Kaleb Luedtke <jluedtk@jci.com>
Date:   Wed,  6 Mar 2024 17:31:56 -0600

Standardize Formatting of Documentation (#4244)

This PR attempts to make it easier to keep the documentation in the repo
a tiny bit cleaner for anyone who uses the EditorConfig extension

* Add EditorConfig
* Lint YAML files
* Lint Markdown files

<!-- 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).
- [ ] This pull request is related to an issue.

-----

###### Microsoft Reviewers: [Open in
CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/microsoft/winget-cli/pull/4244)
Diffstat:
M.configurations/configuration.dsc.yaml | 3+--
A.editorconfig | 22++++++++++++++++++++++
M.github/ISSUE_TEMPLATE/Bug_Report.yml | 4++--
M.github/ISSUE_TEMPLATE/Documentation_Issue.yml | 4++--
M.github/ISSUE_TEMPLATE/Feature_Request.yml | 4++--
M.github/ISSUE_TEMPLATE/config.yml | 5++---
M.github/policies/labelManagement.needsFeedbackHub.yml | 2+-
M.github/workflows/similarissues.yml | 2+-
M.github/workflows/spelling.yml | 8++++----
M.github/workflows/spelling2.yml | 8++++----
M.github/workflows/spelling3.yml | 78+++++++++++++++++++++++++++++++++++++++---------------------------------------
MSECURITY.md | 2+-
MSUPPORT.md | 7+++----
Mdoc/Settings.md | 12++++++------
Mdoc/specs/#1012 - Show dependencies.md | 26+++++++++++++-------------
Mdoc/specs/#1287 - Management of package type dependencies.md | 23+++++++++++------------
Mdoc/specs/#140 - ZIP Support.md | 18+++++++++---------
Mdoc/specs/#163 - Dependencies.md | 6+++---
Mdoc/specs/#164 - PWA Support.md | 4++--
Mdoc/specs/#182 - Support for installation of portable standalone apps.md | 18+++++++++---------
Mdoc/specs/#292 - winget should install an app if there is an exact match.md | 2+-
Mdoc/specs/#396 - Settings command.md | 17++++++++---------
Mdoc/specs/#476 - Package Pinning.md | 42+++++++++++++++++++++---------------------
Mdoc/specs/#658 - WinGet Download.md | 10+++++-----
Mdoc/specs/#888 - Com Api.md | 54+++++++++++++++++++++++++++---------------------------
Mdoc/specs/#980 - Apps and Features entries version mapping.md | 68++++++++++++++++++++++++++++++++++----------------------------------
Mdoc/specs/Configuration-COM-API.md | 5++---
Mdoc/troubleshooting/README.md | 4++--
Mdoc/windows-package-manager-release-roadmap.md | 3+--
Mdoc/windows/package-manager/package/binary-validation-errors.md | 5++---
Mdoc/windows/package-manager/package/manifest.md | 18+++++++++---------
Mdoc/windows/package-manager/package/repository.md | 4++--
Mdoc/windows/package-manager/package/windows-package-manager-policies.md | 8+++-----
Mdoc/windows/package-manager/winget/export.md | 8++++----
Mdoc/windows/package-manager/winget/hash.md | 2+-
Mdoc/windows/package-manager/winget/import.md | 6+++---
Mdoc/windows/package-manager/winget/index.md | 18+++++++++---------
Mdoc/windows/package-manager/winget/install.md | 24++++++++++++------------
Mdoc/windows/package-manager/winget/list.md | 14+++++++-------
Mdoc/windows/package-manager/winget/returnCodes.md | 5++---
Mdoc/windows/package-manager/winget/search.md | 4++--
Mdoc/windows/package-manager/winget/settings.md | 6+++---
Mdoc/windows/package-manager/winget/uninstall.md | 6+++---
Mdoc/windows/package-manager/winget/validate.md | 2+-
44 files changed, 301 insertions(+), 290 deletions(-)

diff --git a/.configurations/configuration.dsc.yaml b/.configurations/configuration.dsc.yaml @@ -26,4 +26,4 @@ properties: productId: Microsoft.VisualStudio.Product.Community channelId: VisualStudio.17.Release vsConfigFile: '${WinGetConfigRoot}\..\.vsconfig' - configurationVersion: 0.2.0- \ No newline at end of file + configurationVersion: 0.2.0 diff --git a/.editorconfig b/.editorconfig @@ -0,0 +1,22 @@ +# top-most EditorConfig file +root=true + +# Apply Windows-style newlines with a newline ending on every file, using UTF-8, and removing extra whitespace before newlines +[*] +end_of_line = crlf +insert_final_newline = true +charset = utf-8 +trim_trailing_whitespace = true + +# Overrides for Yaml Files - Use two spaces for indents +# editorconfig/editorconfig#329 +[*.{yml,yaml}] +indent_style = space +indent_size = 2 + +# Overrides for Markdown Files - Use tab for indents (accessibility) +[*.md] +indent_style = tab + +[{allow.txt,excludes.txt,patterns.txt}] +end_of_line = lf diff --git a/.github/ISSUE_TEMPLATE/Bug_Report.yml b/.github/ISSUE_TEMPLATE/Bug_Report.yml @@ -1,11 +1,11 @@ -name: "🐛 Bug Report" +name: '🐛 Bug Report' description: Report errors or unexpected behavior. body: - type: markdown attributes: value: | > This bug tracker is monitored by Windows Package Manager development team and other technical folks. - > + > > **Important: When reporting BSODs or security issues, DO NOT attach memory dumps, logs, or traces to GitHub issues**. > Instead, send dumps/traces to secure@microsoft.com, referencing this GitHub issue. > diff --git a/.github/ISSUE_TEMPLATE/Documentation_Issue.yml b/.github/ISSUE_TEMPLATE/Documentation_Issue.yml @@ -1,6 +1,6 @@ -name: "📚 Documentation Issue" +name: '📚 Documentation Issue' description: Report issues in our documentation. -labels: ["Issue-Docs"] +labels: ['Issue-Docs'] body: - type: textarea attributes: diff --git a/.github/ISSUE_TEMPLATE/Feature_Request.yml b/.github/ISSUE_TEMPLATE/Feature_Request.yml @@ -1,6 +1,6 @@ -name: "🚀 Feature Request / Idea" +name: '🚀 Feature Request / Idea' description: Suggest a new feature or improvement (this does not mean you have to implement it). -labels: ["Issue-Feature"] +labels: ['Issue-Feature'] body: - type: textarea attributes: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: true -contact_links: +contact_links: - name: Package issues url: https://github.com/microsoft/winget-pkgs/issues about: Please create issues related to the packages here. @@ -8,4 +8,4 @@ contact_links: about: Have a question on something? Start a new discussion thread. - name: Review open issues url: https://github.com/microsoft/winget-cli/issues - about: Please check if your issue or a similar issue has already been submitted- \ No newline at end of file + about: Please check if your issue or a similar issue has already been submitted diff --git a/.github/policies/labelManagement.needsFeedbackHub.yml b/.github/policies/labelManagement.needsFeedbackHub.yml @@ -34,7 +34,7 @@ configuration: permission: Write then: - addReply: - reply: >- + reply: >- Hello @${issueAuthor}, diff --git a/.github/workflows/similarissues.yml b/.github/workflows/similarissues.yml @@ -17,7 +17,7 @@ jobs: with: issuetitle: ${{ github.event.issue.title }} repo: ${{ github.repository }} - similaritytolerance: "0.7" + similaritytolerance: '0.75' add-comment: needs: getSimilarIssues runs-on: ubuntu-latest diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest if: false steps: - - name: Task - run: | - echo 'Running this task would be bad' - exit 1 + - name: Task + run: | + echo 'Running this task would be bad' + exit 1 diff --git a/.github/workflows/spelling2.yml b/.github/workflows/spelling2.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest if: false steps: - - name: Task - run: | - echo 'Running this task would be bad' - exit 1 + - name: Task + run: | + echo 'Running this task would be bad' + exit 1 diff --git a/.github/workflows/spelling3.yml b/.github/workflows/spelling3.yml @@ -39,18 +39,18 @@ name: Check Spelling on: push: branches: - - "**" + - '**' tags-ignore: - - "**" + - '**' pull_request_target: branches: - - "**" + - '**' tags-ignore: - - "**" + - '**' types: - - 'opened' - - 'reopened' - - 'synchronize' + - 'opened' + - 'reopened' + - 'synchronize' jobs: spelling: @@ -68,26 +68,26 @@ jobs: # note: If you use only_check_changed_files, you do not want cancel-in-progress cancel-in-progress: true steps: - - name: check-spelling - id: spelling - uses: check-spelling/check-spelling@v0.0.21 - with: - suppress_push_for_open_pull_request: 1 - checkout: true - check_file_names: 1 - spell_check_this: check-spelling/spell-check-this@prerelease - post_comment: 0 - use_magic_file: 1 - extra_dictionary_limit: 10 - extra_dictionaries: - cspell:cpp/src/compiler-msvc.txt - cspell:cpp/src/cpp.txt - cspell:cpp/src/stdlib-c.txt - cspell:cpp/src/stdlib-cpp.txt - cspell:filetypes/filetypes.txt - cspell:fullstack/fullstack.txt - cspell:powershell/powershell.txt - cspell:software-terms/src/software-terms.txt + - name: check-spelling + id: spelling + uses: check-spelling/check-spelling@v0.0.21 + with: + suppress_push_for_open_pull_request: 1 + checkout: true + check_file_names: 1 + spell_check_this: check-spelling/spell-check-this@prerelease + post_comment: 0 + use_magic_file: 1 + extra_dictionary_limit: 10 + extra_dictionaries: + cspell:cpp/src/compiler-msvc.txt + cspell:cpp/src/cpp.txt + cspell:cpp/src/stdlib-c.txt + cspell:cpp/src/stdlib-cpp.txt + cspell:filetypes/filetypes.txt + cspell:fullstack/fullstack.txt + cspell:powershell/powershell.txt + cspell:software-terms/src/software-terms.txt comment-push: name: Report (Push) @@ -98,12 +98,12 @@ jobs: contents: write if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' steps: - - name: comment - uses: check-spelling/check-spelling@v0.0.21 - with: - checkout: true - spell_check_this: check-spelling/spell-check-this@prerelease - task: ${{ needs.spelling.outputs.followup }} + - name: comment + uses: check-spelling/check-spelling@v0.0.21 + with: + checkout: true + spell_check_this: check-spelling/spell-check-this@prerelease + task: ${{ needs.spelling.outputs.followup }} comment-pr: name: Report (PR) @@ -114,9 +114,9 @@ jobs: pull-requests: write if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') steps: - - name: comment - uses: check-spelling/check-spelling@v0.0.21 - with: - checkout: true - spell_check_this: check-spelling/spell-check-this@prerelease - task: ${{ needs.spelling.outputs.followup }} + - name: comment + uses: check-spelling/check-spelling@v0.0.21 + with: + checkout: true + spell_check_this: check-spelling/spell-check-this@prerelease + task: ${{ needs.spelling.outputs.followup }} diff --git a/SECURITY.md b/SECURITY.md @@ -14,7 +14,7 @@ Instead, please report them to the Microsoft Security Response Center (MSRC) at If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp). -You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: diff --git a/SUPPORT.md b/SUPPORT.md @@ -1,12 +1,12 @@ # Support -## How to file issues and get help +## How to file issues and get help This project uses [GitHub issues][gh-issue] to [track bugs][gh-bug] and [feature requests][gh-feature]. Please search the existing issues before filing new issues to avoid duplicates. For new topics, file your bug or feature request as a new issue. For help and questions about using this project, please look at the [docs site for Windows Package Manager][docs] and our [Contributor's Guide][contributor] if you want to work on WinGet. -## Microsoft Support Policy +## Microsoft Support Policy Support for Windows Package Manager is limited to the resources listed above. @@ -14,4 +14,4 @@ Support for Windows Package Manager is limited to the resources listed above. [gh-bug]: https://github.com/microsoft/winget-cli/issues/new?assignees=&labels=Issue-Bug&projects=&template=Bug_Report.yml [gh-feature]: https://github.com/microsoft/winget-cli/issues/new?assignees=&labels=Issue-Feature&projects=&template=Feature_Request.yml [docs]: https://docs.microsoft.com/windows/package-manager -[contributor]: https://github.com/microsoft/winget-cli/blob/master/CONTRIBUTING.md- \ No newline at end of file +[contributor]: https://github.com/microsoft/winget-cli/blob/master/CONTRIBUTING.md diff --git a/doc/Settings.md b/doc/Settings.md @@ -16,7 +16,7 @@ The `source` settings involve configuration to the WinGet source. "source": { "autoUpdateIntervalInMinutes": 3 }, -``` +``` ### autoUpdateIntervalInMinutes @@ -33,7 +33,7 @@ The `visual` settings involve visual elements that are displayed by WinGet ### progressBar -Color of the progress bar that WinGet displays when not specified by arguments. +Color of the progress bar that WinGet displays when not specified by arguments. - accent (default) - retro @@ -232,7 +232,7 @@ The `downloader` setting controls which code is used when downloading packages. `wininet` uses the [WinINet](https://docs.microsoft.com/windows/win32/wininet/about-wininet) APIs, while `do` uses the [Delivery Optimization](https://support.microsoft.com/windows/delivery-optimization-in-windows-10-0656e53c-15f2-90de-a87a-a2172c94cf6d) service. -The `doProgressTimeoutInSeconds` setting updates the number of seconds to wait without progress before fallback. The default number of seconds is 60, minimum is 1 and the maximum is 600. +The `doProgressTimeoutInSeconds` setting updates the number of seconds to wait without progress before fallback. The default number of seconds is 60, minimum is 1 and the maximum is 600. ```json "network": { @@ -257,7 +257,7 @@ If set to true, the `interactivity.disable` setting will prevent any interactive ## Experimental Features -To allow work to be done and distributed to early adopters for feedback, settings can be used to enable "experimental" features. +To allow work to be done and distributed to early adopters for feedback, settings can be used to enable "experimental" features. The `experimentalFeatures` settings involve the configuration of these "experimental" features. Individual features can be enabled under this node. The example below shows sample experimental features. @@ -270,8 +270,8 @@ The `experimentalFeatures` settings involve the configuration of these "experime ### directMSI -This feature enables the Windows Package Manager to directly install MSI packages with the MSI APIs rather than through msiexec. -Note that when silent installation is used this is already in affect, as MSI packages that require elevation will fail in that scenario without it. +This feature enables the Windows Package Manager to directly install MSI packages with the MSI APIs rather than through msiexec. +Note that when silent installation is used this is already in affect, as MSI packages that require elevation will fail in that scenario without it. You can enable the feature as shown below. ```json diff --git a/doc/specs/#1012 - Show dependencies.md b/doc/specs/#1012 - Show dependencies.md @@ -30,9 +30,9 @@ Found Notepad++ [Notepad++.Notepad++] This application is licensed to you by its owner. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages. This package requires the following dependencies: - - Windows Feature: + - Windows Feature: Hyper-V - - Package: + - Package: Microsoft.WindowsTerminal Downloading https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v7.9.5/npp.7.9.5.Installer.x64.exe Successfully verified installer hash @@ -58,9 +58,9 @@ Installer: Download Url: https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v7.9.5/npp.7.9.5.Installer.x64.exe SHA256: 4881548cd86491b453520e83c19292c93b9c6ce485a1f9eb9301e3913a9baced Dependencies: - - Windows Feature: + - Windows Feature: Hyper-V - - Package: + - Package: Microsoft.WindowsTerminal ``` @@ -72,9 +72,9 @@ Found Notepad++ [Notepad++.Notepad++] This application is licensed to you by its owner. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages. This package requires the following dependencies: - - Windows Feature: + - Windows Feature: Hyper-V - - Package: + - Package: Microsoft.WindowsTerminal Successfully verified installer hash Starting package install... @@ -88,9 +88,9 @@ Uninstall needs more work as we don't have the actual installer to get the depen Will gather and report dependencies for all of the installers found. Will not check if they are valid nor if there are duplicates. ``` Manifest has the following dependencies that were not validated; ensure that they are valid: - - Windows Feature: + - Windows Feature: Hyper-V - - Package: + - Package: Microsoft.WindowsTerminal Manifest validation succeeded. ``` @@ -99,14 +99,14 @@ Manifest validation succeeded. Will gather all the dependencies from the packages included in the import and show them together before starting. ``` The packages found in this import have the following dependencies: - - Windows Feature: + - Windows Feature: Hyper-V Containers - - Windows Libraries: + - Windows Libraries: Microsoft.WinJS - - Package: + - Package: Microsoft.WindowsTerminal - - External: + - External: JDK-11.0.10 Found [Notepad++.Notepad++] This application is licensed to you by its owner. @@ -125,7 +125,7 @@ Successfully installed ## Capabilities It's only an informational feature, will not check if the dependency is a valid one, nor if the source is available. -If a dependency is declared more than once (for example when gathering all dependencies in an import) it will only show the highest minimum version needed. +If a dependency is declared more than once (for example when gathering all dependencies in an import) it will only show the highest minimum version needed. Keep in mind dependencies can be declared on the root manifest and on each of the installers. If they happen to be declared in both, installer's dependencies will override those of the manifest. With the manifest's dependencies working as a default whenever installer's dependencies are not declared. diff --git a/doc/specs/#1287 - Management of package type dependencies.md b/doc/specs/#1287 - Management of package type dependencies.md @@ -13,7 +13,7 @@ For [#1287](https://github.com/microsoft/winget-cli/issues/1287) As a new step in the pursue of dependency management, the Windows Package Manager will take care of one of the four types of dependencies (Package) for most of the commands. The underlying logic of the code will prove useful when implementing the rest of the types and commands; since it will manage dependencies' graph building and validation, as well as the correct order of installation. ## Solution Design -The Windows Package Manager will build the dependencies' graph and corroborate there's not a cyclic dependency, among other validations (depending on the command). +The Windows Package Manager will build the dependencies' graph and corroborate there's not a cyclic dependency, among other validations (depending on the command). ### Install: Install command will build the dependency graph at runtime, from installer information. It will report on the other three types of dependencies and manage package type installation/validation (for new/installed dependencies respectively). @@ -21,7 +21,7 @@ As a best effort, in case a cyclic dependency exists, Windows Package Manager wi While building the graph, install command will verify: * Availability: the package declared as dependency will need to be an existing one. -* Installed version: it will check for existing versions of the dependency and update if the minimum required version is bigger than the installed. +* Installed version: it will check for existing versions of the dependency and update if the minimum required version is bigger than the installed. * Version: minimum required version will need to be less or equal to the latest available one. Information will be shown about failures, existence or installation progress for each of the dependencies required. @@ -34,9 +34,9 @@ Found Notepad++ [Notepad++.Notepad++] This application is licensed to you by its owner. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages. This package requires the following dependencies: - - Windows Feature: + - Windows Feature: Hyper-V - - Package: + - Package: Microsoft.WindowsTerminal Building package type dependencies' graph: No errors or cyclic dependencies found. @@ -57,14 +57,14 @@ Import command will report all first level dependencies beforehand and after wil ``` The packages found in this import have the following dependencies: - - Windows Feature: + - Windows Feature: Hyper-V Containers - - Windows Libraries: + - Windows Libraries: Microsoft.WinJS - - Package: + - Package: Microsoft.WindowsTerminal - - External: + - External: JDK-11.0.10 Found [Notepad++.Notepad++] This application is licensed to you by its owner. @@ -94,9 +94,9 @@ Found Notepad++ [Notepad++.Notepad++] This application is licensed to you by its owner. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages. This package requires the following dependencies: - - Windows Feature: + - Windows Feature: Hyper-V - - Package: + - Package: Microsoft.WindowsTerminal Building package type dependencies' graph: No errors or cyclic dependencies found. @@ -113,4 +113,4 @@ Starting package install... ## Capabilities Will manage package type dependencies installation for install, import and update commands. -Will not manage or try to install any of the other types of dependencies (Windows Features, Windows Libraries, External).- \ No newline at end of file +Will not manage or try to install any of the other types of dependencies (Windows Features, Windows Libraries, External). diff --git a/doc/specs/#140 - ZIP Support.md b/doc/specs/#140 - ZIP Support.md @@ -27,12 +27,12 @@ Addition of `NestedInstallerType`: - Enumeration of supported nested installerTypes contained inside an archive file. Addition of `NestedInstallerFile` -- Object containing metadata about a nested installer file contained inside an archive. +- Object containing metadata about a nested installer file contained inside an archive. - Properties: - `RelativeFilePath`: The relative path to a nested installer file contained inside an archive. - `PortableCommandAlias`: The command alias to be used for calling the package. Only applies to a nested portable package. -These changes would be added to the `Installer` object with `NestedInstallerFiles` representing an array of `NestedInstallerFile`. +These changes would be added to the `Installer` object with `NestedInstallerFiles` representing an array of `NestedInstallerFile`. ### Manifest Validation: - Exactly one `NestedInstallerFile` entry must be specified for a non-portable nested installer type. @@ -41,17 +41,17 @@ These changes would be added to the `Installer` object with `NestedInstallerFile ## Supported Install Scenarios: The initial implementation of this feature will only support the following installation scenarios: -- Single base installer (exe, msi, msix) contained inside an archive file. +- Single base installer (exe, msi, msix) contained inside an archive file. - Single or multiple portable exes bundled as a suite inside an archive file. ## ZIP Extraction -The extraction of ZIPs will be done using Windows Shell APIs. ZIP files can be represented as a [ShellFolder](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nn-shobjidl_core-ishellfolder) object that can be used to manage the contents of the ZIP file. File contents are represented as [ShellItems](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nn-shobjidl_core-ishellitem), which can be handled using the methods exposed by the [IFileOperation interface](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nn-shobjidl_core-ifileoperation). +The extraction of ZIPs will be done using Windows Shell APIs. ZIP files can be represented as a [ShellFolder](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nn-shobjidl_core-ishellfolder) object that can be used to manage the contents of the ZIP file. File contents are represented as [ShellItems](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nn-shobjidl_core-ishellitem), which can be handled using the methods exposed by the [IFileOperation interface](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nn-shobjidl_core-ifileoperation). -In our initial implementation, we will only support extracting the top level archive to a temporary location. This means that the `NestedInstallerFile` must not be contained in any nested archives. The appropriate install flow will proceed based on the specified `NestedInstallerType`. +In our initial implementation, we will only support extracting the top level archive to a temporary location. This means that the `NestedInstallerFile` must not be contained in any nested archives. The appropriate install flow will proceed based on the specified `NestedInstallerType`. > If the community presents enough use cases that require decompressing additional layers, then we will consider extending this functionality and adding a separate manifest entry to override the default behavior of only unzipping the top level archive. -> Since we are utilizing Windows Shell APIs, we need to ensure that we are not invoking a UI during the extraction. This can be done by [setting the operation flag to not display any UI](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nf-shobjidl_core-ifileoperation-setoperationflags). +> Since we are utilizing Windows Shell APIs, we need to ensure that we are not invoking a UI during the extraction. This can be done by [setting the operation flag to not display any UI](https://docs.microsoft.com/windows/win32/api/shobjidl_core/nf-shobjidl_core-ifileoperation-setoperationflags). > During implementation, we will also need to ensure that this process can work under SYSTEM context. @@ -62,9 +62,9 @@ ZIP and other archive file types are known threat vectors for malware in the for A ZIP file containing multiple layers of nested ZIP files that achieve high compression ratios when decompressed recursively. This technique is often used to bypass compression ratio checks performed by ZIP parsers for a single layer. 2. **Single-Layered (non-recursive)** -A ZIP bomb that expands fully after a single round of decompression. The extremely high compression ratio of the ZIP bomb is achieved by overlapping files within the ZIP container. +A ZIP bomb that expands fully after a single round of decompression. The extremely high compression ratio of the ZIP bomb is achieved by overlapping files within the ZIP container. -In order to protect our users from these possible threats, we will need to scan the ZIP file for malware using [Pure, a static analysis file format checker](https://github.com/ronomon/pure). +In order to protect our users from these possible threats, we will need to scan the ZIP file for malware using [Pure, a static analysis file format checker](https://github.com/ronomon/pure). > Pure is licensed under the [MIT license](https://github.com/ronomon/pure/blob/master/LICENSE). @@ -76,7 +76,7 @@ To minimize unnecessary costs on performance during installation, these checks w - Untrusted source (i.e. installing from a local manifest, private source or third-party REST sources) ## Supporting Nested Portable(s) in an Archive -Currently, information regarding a single installed portable is stored in the ARP entry. In order to support installing a single or multiple portables contained inside an archive file, we will need to create a separate record that will be stored with the extracted files. This record will contain a table capturing the list of files that were created and placed down as well as various metadata to enable us to verify whether they have been modified. This table should replace most of the uninstall-related information that is stored in ARP for a given portable package. +Currently, information regarding a single installed portable is stored in the ARP entry. In order to support installing a single or multiple portables contained inside an archive file, we will need to create a separate record that will be stored with the extracted files. This record will contain a table capturing the list of files that were created and placed down as well as various metadata to enable us to verify whether they have been modified. This table should replace most of the uninstall-related information that is stored in ARP for a given portable package. The table will contain the following information for each item that we create or place down during installation. diff --git a/doc/specs/#163 - Dependencies.md b/doc/specs/#163 - Dependencies.md @@ -42,9 +42,9 @@ Do you have these dependencies installed [y/n]? ``` If the user chooses "yes", the installation will proceed. -Note: This is essentially the complete implementation for External Dependencies. It is not required at this stage to deal with nested dependencies. +Note: This is essentially the complete implementation for External Dependencies. It is not required at this stage to deal with nested dependencies. -In addition, the consumes and provides concept is not in scope with this implementation. +In addition, the consumes and provides concept is not in scope with this implementation. ### Windows Features These include items like .NET Frameworks, Internet Information Services, and Windows Subsystem for Linux. In some cases, turning these features on may require a reboot. @@ -72,7 +72,7 @@ Several different package installers exist and treat dependencies differently. MSIX installers have an internal mechanism to identify dependencies. -MSI and .exe installers may include dependencies. +MSI and .exe installers may include dependencies. ### Accessibility diff --git a/doc/specs/#164 - PWA Support.md b/doc/specs/#164 - PWA Support.md @@ -21,7 +21,7 @@ PWA adoption is extremely important in the Windows app ecosystem. It is also cru ### System requirements -Windows 10 v2004 or newer +Windows 10 v2004 or newer Edge latest Canary build ### PWA YAML manifest @@ -119,5 +119,5 @@ If the user navigates to the site before launching the installed PWA at least on ## Resources -Hosted App Model : https://blogs.windows.com/windowsdeveloper/2020/03/19/hosted-app-model/ +Hosted App Model : https://blogs.windows.com/windowsdeveloper/2020/03/19/hosted-app-model/ Test Website for generating MSIX for PWA : https://pwabuilder-win-chromium-platform.centralus.cloudapp.azure.com/ diff --git a/doc/specs/#182 - Support for installation of portable standalone apps.md b/doc/specs/#182 - Support for installation of portable standalone apps.md @@ -29,7 +29,7 @@ Users should be able to specify the location for where the program is “install Some packages like GitLab Runner have a file name including extra metadata (gitlab-runner-windows-386.exe). The installation instructions suggest renaming the file after it has been downloaded. In that vein, a "--rename" argument should be added so the user can choose a value they prefer. To have the upgrade scenario honor the custom name, this information should be recorded in the installed packages data store. -Portable / standalone executables should have their “command” value specified so the Windows Package Manager can determine the default value to use when creating a new entry in the "App Paths" registry during installation. If no command value is provided, then the entry will use the filename of the exe. +Portable / standalone executables should have their “command” value specified so the Windows Package Manager can determine the default value to use when creating a new entry in the "App Paths" registry during installation. If no command value is provided, then the entry will use the filename of the exe. Some portable applications generate or consume other files. An additional argument "--purge" will be added for the uninstall scenario to remove all files and subsequently the directory if the user wishes. The corollary argument "--preserve" will be used to preserve files if the default setting has been modified. @@ -50,7 +50,7 @@ A related setting for the uninstall scenario will be able to specify the default ### Install -When the portable application is being installed by the Windows Package Manager, an entry will be created in Windows Apps & Features so the user will be able to see that the application is installed. +When the portable application is being installed by the Windows Package Manager, an entry will be created in Windows Apps & Features so the user will be able to see that the application is installed. Once the portable application is copied to the appropriate install location based on the preferences of the user, a symlink will be created that points to the portable application. The locations where these symlinks will be stored are "%LOCALAPPDATA%/Microsoft/WinGet/Links/" for user based installs, "Program Files/WinGet/Links/" for machine wide x64 installs and "Program Files (x86)/WinGet/Links/" for machine wide x86 installs. We will then append these paths to the PATH environment variable if they do not exist already. @@ -71,7 +71,7 @@ By default, portable apps will be installed with the "User" scope unless specifi #### Installation from multiple sources: -If the user chooses to install the same package but from a secondary source, the Windows Package Manager will append the source name to subdirectory. For example, if GitLabRunner is installed a second time but from the msstore, then the full path would be "%LOCALAPPDATA%/Microsoft/WinGet/Packages/GitLab.GitLabRunner_msstore/". +If the user chooses to install the same package but from a secondary source, the Windows Package Manager will append the source name to subdirectory. For example, if GitLabRunner is installed a second time but from the msstore, then the full path would be "%LOCALAPPDATA%/Microsoft/WinGet/Packages/GitLab.GitLabRunner_msstore/". The same behavior will be applied when creating a symlink in order to avoid overwriting an existing symlink of the same package but from a different source. Using the same example, the generated symlink for GitLabRunner from the msstore will have a full path of "%LOCALAPPDATA%/Microsoft/WinGet/Links/GitLab.GitLabRunner_msstore.exe/" @@ -79,7 +79,7 @@ The same behavior will be applied when creating a symlink in order to avoid over The package is upgraded in the same path as the installed version. The first step the Windows Package Manager will perform is to download the executable to a temporary location, and attempt to copy the exe to the specified install location. If an exe with the same name already exists, the Windows Package Manager will attempt to overwrite the file. If that process fails because the file is currently in use, the user will be informed the package is running so they can shut it down. Optionally, the user may specify "--force" to forcefully shut the application down for upgrade. Once the exe has successfully been copied to the specified install location, the entry in "Apps & Features" will be updated accordingly and the symlink will be overwritten to point to the latest portable exe. -If the "UninstallPrevious" field is specified in the manifest, then the Windows Package Manager will perform an uninstall of the previous version of the package prior to installing the newer version. +If the "UninstallPrevious" field is specified in the manifest, then the Windows Package Manager will perform an uninstall of the previous version of the package prior to installing the newer version. A new Windows Apps & Features entry is created to correctly report the upgraded version for future potential upgrades. @@ -91,7 +91,7 @@ The executable and the symlink should be removed along with the entry in Apps & >Note: The default behavior for uninstalling a portable application with Windows Apps & Features will be to execute uninstall without "--purge" so any files created by the portable application will be remain if they are located in the portable applications directory. An additional argument for "--wait" will be added that will prompt the user to press any key to exit. This is intended to support this scenario so that the user is aware of any remaining files if they choose to uninstall through Windows Apps & Features. -If the directory is empty after removing the portable application, the directory should also be deleted. If the directory is not empty, the user should be informed that other files exist in the directory so it will not be removed. +If the directory is empty after removing the portable application, the directory should also be deleted. If the directory is not empty, the user should be informed that other files exist in the directory so it will not be removed. ### Manifest Validation @@ -149,7 +149,7 @@ Package in use. Either exit the program or use "--force" to upgrade. ### Uninstalling a portable package ```text -winget uninstall NuGet +winget uninstall NuGet Found NuGet [Microsoft.NuGet] Starting package uninstall... Successfully uninstalled @@ -158,11 +158,11 @@ Successfully uninstalled If the portable application created files in the portable application's directory, the user will be informed. ```text -winget uninstall NuGet +winget uninstall NuGet Found NuGet [Microsoft.NuGet] Starting package uninstall... -The "--purge" argument was not specified. -Files still exist in "%LOCALAPPDATA%/WinGet_Packages/User/Microsoft.NuGet/". +The "--purge" argument was not specified. +Files still exist in "%LOCALAPPDATA%/WinGet_Packages/User/Microsoft.NuGet/". Successfully uninstalled ``` diff --git a/doc/specs/#292 - winget should install an app if there is an exact match.md b/doc/specs/#292 - winget should install an app if there is an exact match.md @@ -12,7 +12,7 @@ For [#292](https://github.com/microsoft/winget-cli/issues/292) ## Abstract The winget.exe client attempts to be generous with the `search` command, but is a bit too generous with `install`. The *id* -should be the unique key to identifying a package (other than the package version). It should also be case insensitive from the perspective of command execution, but it should be case sensitive in terms of the displayed value. +should be the unique key to identifying a package (other than the package version). It should also be case insensitive from the perspective of command execution, but it should be case sensitive in terms of the displayed value. If a manifest was created with the *id* "Git.Git" then that is what would be displayed in the client output. Any combination of case in the `install` command should match. diff --git a/doc/specs/#396 - Settings command.md b/doc/specs/#396 - Settings command.md @@ -23,7 +23,7 @@ Add ability for user to set their own preferences. The WinGet settings file needs to be in a readable format for users. We considered using other options, like the registry, but having a file makes it more accessible to users. -#### Option 1: YAML +#### Option 1: YAML WinGet already knows how to handle YAML files via yaml-cpp. To follow the manifest style, the properties will be PascalCased. @@ -42,7 +42,7 @@ Based on this information we are going to use JSON and jsoncpp as a parser. For WinGet can either run in package context or not. That means the location of the settings file will be determined depending on the context. -Package Context: %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json. For more about UWP file system see [this](https://docs.microsoft.com/windows/uwp/get-started/fileio-learning-track#access-the-file-system) +Package Context: %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json. For more about UWP file system see [this](https://docs.microsoft.com/windows/uwp/get-started/fileio-learning-track#access-the-file-system) Non-package context: %LOCALAPPDATA%\Microsoft\Winget\settings.json @@ -57,7 +57,7 @@ Options: A command is a better option than having an argument, for example `winget --settings`, because it let us add more commands into it in the future such as set and unset. -The expectation is that when the user enters `winget settings` the settings file will be opened in the user's default text editor via ShellExecute. If the user doesn't have any file type association with `.json`, the default will be to open it with notepad.exe +The expectation is that when the user enters `winget settings` the settings file will be opened in the user's default text editor via ShellExecute. If the user doesn't have any file type association with `.json`, the default will be to open it with notepad.exe There will also be a telemetry point added into the command as the other commands have. @@ -90,9 +90,9 @@ Since the settings file doesn't exist at this time, we can't force the creation These leave us with three different sources of settings in order of importance: 1. settings.json 2. settings.json.backup -3. Default settings +3. Default settings -Setting will be loaded as following: +Setting will be loaded as following: ``` if settings exists and valid @@ -103,9 +103,9 @@ else use default settings ``` -Where valid means that syntax and semantic checks pass. For now, semantics checks will be part of the validation. If one setting is semantically incorrect and we fallback to backup proves to be annoying to users, checks can be relaxed so that only syntax failures are fatal and semantic errors are warnings. We could also in the future add a `winget settings validate` to improve the experience. +Where valid means that syntax and semantic checks pass. For now, semantics checks will be part of the validation. If one setting is semantically incorrect and we fallback to backup proves to be annoying to users, checks can be relaxed so that only syntax failures are fatal and semantic errors are warnings. We could also in the future add a `winget settings validate` to improve the experience. -We cannot force the user to upgrade, so it is possible for someone to add a setting for a future version that is not supported. There is not an easy way to detect it which means that loading the settings will warn of an unknown property. The user will need to verify the documentation and the version of winget that is running via `winget --info`. +We cannot force the user to upgrade, so it is possible for someone to add a setting for a future version that is not supported. There is not an easy way to detect it which means that loading the settings will warn of an unknown property. The user will need to verify the documentation and the version of winget that is running via `winget --info`. #### Errors and Warnings @@ -205,4 +205,4 @@ This feature allows the ability to expand the customization of winget for any us ## References -@JohnMcPMS for telling me what to type.- \ No newline at end of file +@JohnMcPMS for telling me what to type. diff --git a/doc/specs/#476 - Package Pinning.md b/doc/specs/#476 - Package Pinning.md @@ -48,15 +48,15 @@ Microsoft.TestApp winget 1.2.* Gating A new `winget pin` command with 3 sub-commands will be introduced. - Add package pinning configuration: - + `winget pin add <package> [--version <optional gated version>] [--source <source>] [--force] [--blocking]` - + - Remove package pinning configuration: `winget pin remove <package> [--source <source>] [--force]` - -- List package pinning configuration: - + +- List package pinning configuration: + `winget pin list <package> [--source <source>]` for a specific package or `winget pin list` to list all #### Blocking @@ -139,24 +139,24 @@ Success **Note:** Regarding gated version syntax, it will be mostly same as what current winget version supports, except with special `.*` in the end as wild card matching any remaining version parts if there are any. -Example: -When `.*` in the end is detected: -Gate version `1.0.*` matches Version `1.0.1` -Gate version `1.0.*` matches Version `1.0` -Gate version `1.0.*` matches Version `1` -Gate version `1.0.*` matches Version `1.0.alpha` -Gate version `1.0.*` matches Version `1.0.1.2.3` +Example: +When `.*` in the end is detected: +Gate version `1.0.*` matches Version `1.0.1` +Gate version `1.0.*` matches Version `1.0` +Gate version `1.0.*` matches Version `1` +Gate version `1.0.*` matches Version `1.0.alpha` +Gate version `1.0.*` matches Version `1.0.1.2.3` Gate version `1.0.*` matches Version `1.0.*` -Gate version `1.0.*` does not match Version `1.1.1` +Gate version `1.0.*` does not match Version `1.1.1` -In rare cases where `*` is actually part of a version, only the last `.*` is considered wild card: -Gate version `1.*.*` matches Version `1.*.1` -Gate version `1.*.*` matches Version `1.*.*` -Gate version `1.*.*` does not match Version `1.1.1` +In rare cases where `*` is actually part of a version, only the last `.*` is considered wild card: +Gate version `1.*.*` matches Version `1.*.1` +Gate version `1.*.*` matches Version `1.*.*` +Gate version `1.*.*` does not match Version `1.1.1` -If no `.*` in the end is detected, the gate version gates to the specific version: -Gate version `1.0.1` matches Version `1.0.1` -Gate version `1.0.1` does not match Version `1.1.1` +If no `.*` in the end is detected, the gate version gates to the specific version: +Gate version `1.0.1` matches Version `1.0.1` +Gate version `1.0.1` does not match Version `1.1.1` ## Capabilities @@ -170,7 +170,7 @@ Security of the Windows Package Manager should not be impacted by this change. H ### Reliability -The change will improve reliability, as users will be able to have fine grained control of the Windows Package Manager's upgrade functionality to ensure their workflow is not disrupted. +The change will improve reliability, as users will be able to have fine grained control of the Windows Package Manager's upgrade functionality to ensure their workflow is not disrupted. ### Compatibility diff --git a/doc/specs/#658 - WinGet Download.md b/doc/specs/#658 - WinGet Download.md @@ -16,7 +16,7 @@ This spec describes the functionality and high-level implementation design for d ## Inspiration This is inspired by customer feedback, and a need for broader application deployments: -* Customers want to share the installer with an offline device. +* Customers want to share the installer with an offline device. ## Solution Design @@ -50,10 +50,10 @@ The `download` command will provide users with the ability to download any insta ``` ### Selecting the installer -A new command argument for `--installer-type` has been added to support selecting a specific installer type to download. A package installer should also be able to be selected by `--scope`, `--architecture`, and `--locale`. +A new command argument for `--installer-type` has been added to support selecting a specific installer type to download. A package installer should also be able to be selected by `--scope`, `--architecture`, and `--locale`. ### Downloading the installer -Downloading the package's installer will still require that the package's installer hash be verified before becoming available to the user to interact with. By default, installers will be downloaded to a unique folder name located in the `%USERPROFILE%/Downloads` directory. The default download directory can be modified in the user's settings. The unique folder name is comprised of the package identifier and package version. The installer will be comprised of the package identifier, package version, scope, architecture, and locale. This naming pattern ensures that the installer is unique and identifiable based on the installer filters applied: +Downloading the package's installer will still require that the package's installer hash be verified before becoming available to the user to interact with. By default, installers will be downloaded to a unique folder name located in the `%USERPROFILE%/Downloads` directory. The default download directory can be modified in the user's settings. The unique folder name is comprised of the package identifier and package version. The installer will be comprised of the package identifier, package version, scope, architecture, and locale. This naming pattern ensures that the installer is unique and identifiable based on the installer filters applied: > Example installer download path name: `%USER_PROFILE%\Downloads\Microsoft.PowerToys_0.78.0\PowerToys (Preview)_0.78.0_User_X64_burn_en-US.exe` @@ -94,7 +94,7 @@ usage: winget download [[-q] <query>] [<options>] ### WinGet Setting - Default Download Output -The following items will be included in the WinGet Settings Schema +The following items will be included in the WinGet Settings Schema ```json "DownloadBehavior": { @@ -143,7 +143,7 @@ Accessibility should not be impacted by this change. There will be a new column ### Security -Security of the Windows Package Manager should not be impacted by this change. +Security of the Windows Package Manager should not be impacted by this change. ### Reliability diff --git a/doc/specs/#888 - Com Api.md b/doc/specs/#888 - Com Api.md @@ -56,7 +56,7 @@ be used to get availability information or start an install. CatalogPackage MainPage::FindPackageOnBackgroundThread() { PackageManager packageManager = CreatePackageManager(); - PackageCatalogReference catalogRef{ + PackageCatalogReference catalogRef{ packageManager.GetPredefinedPackageCatalog(PredefinedPackageCatalog::OpenWindowsCatalog) }; ConnectResult connectResult = catalogRef.Connect(); if (connectResult.Status() != ConnectResultStatus::Ok) @@ -83,7 +83,7 @@ be used to get availability information or start an install. } // Sample of using async methods. - IAsyncOperation<CatalogPackage> MainPage::FindPackageInCatalogAsync(PackageCatalog catalog, + IAsyncOperation<CatalogPackage> MainPage::FindPackageInCatalogAsync(PackageCatalog catalog, std::wstring packageId) { FindPackagesOptions findPackagesOptions = CreateFindPackagesOptions(); @@ -105,7 +105,7 @@ be used to get availability information or start an install. IAsyncOperation<CatalogPackage> MainPage::FindPackageAsync() { PackageManager packageManager = CreatePackageManager(); - PackageCatalogReference catalogRef{ + PackageCatalogReference catalogRef{ packageManager.GetPredefinedPackageCatalog(PredefinedPackageCatalog::OpenWindowsCatalog) }; ConnectResult connectResult = catalogRef.Connect(); if (connectResult.Status() != ConnectResultStatus::Ok) @@ -131,8 +131,8 @@ be used to get availability information or start an install. } IAsyncAction UpdateUIProgress( - InstallProgress progress, - winrt::Windows::UI::Xaml::Controls::ProgressBar progressBar, + InstallProgress progress, + winrt::Windows::UI::Xaml::Controls::ProgressBar progressBar, winrt::Windows::UI::Xaml::Controls::TextBlock statusText) { co_await winrt::resume_foreground(progressBar.Dispatcher()); @@ -167,10 +167,10 @@ be used to get availability information or start an install. // This method is called from a background thread. IAsyncAction UpdateUIForInstall( - IAsyncOperationWithProgress<InstallResult, InstallProgress> installPackageOperation, + IAsyncOperationWithProgress<InstallResult, InstallProgress> installPackageOperation, winrt::Windows::UI::Xaml::Controls::Button installButton, winrt::Windows::UI::Xaml::Controls::Button cancelButton, - winrt::Windows::UI::Xaml::Controls::ProgressBar progressBar, + winrt::Windows::UI::Xaml::Controls::ProgressBar progressBar, winrt::Windows::UI::Xaml::Controls::TextBlock statusText) { if (installPackageOperation) @@ -253,7 +253,7 @@ be used to get availability information or start an install. co_await winrt::resume_background(); PackageManager packageManager = CreatePackageManager(); - PackageCatalogReference catalogRef{ + PackageCatalogReference catalogRef{ packageManager.GetPredefinedPackageCatalog(PredefinedPackageCatalog::OpenWindowsCatalog) }; ConnectResult connectResult = catalogRef.Connect(); if (connectResult.Status() != ConnectResultStatus::Ok) @@ -345,16 +345,16 @@ namespace Microsoft.Management.Deployment [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 1)] enum PackageInstallProgressState { - /// The install is queued but not yet active. Cancellation of the IAsyncOperationWithProgress in this + /// The install is queued but not yet active. Cancellation of the IAsyncOperationWithProgress in this /// state will prevent the package from downloading or installing. Queued, - /// The installer is downloading. Cancellation of the IAsyncOperationWithProgress in this state will + /// The installer is downloading. Cancellation of the IAsyncOperationWithProgress in this state will /// end the download and prevent the package from installing. Downloading, /// The install is in progress. Cancellation of the IAsyncOperationWithProgress in this state will not /// stop the installation or the post install cleanup. Installing, - /// The installer has completed and cleanup actions are in progress. Cancellation of the + /// The installer has completed and cleanup actions are in progress. Cancellation of the /// IAsyncOperationWithProgress in this state will not stop cleanup or roll back the install. PostInstall, /// The operation has completed. @@ -362,7 +362,7 @@ namespace Microsoft.Management.Deployment }; /// Progress object for the install - /// DESIGN NOTE: percentage for the install as a whole is purposefully not included as there is no way to + /// DESIGN NOTE: percentage for the install as a whole is purposefully not included as there is no way to /// estimate progress when the installer is running. [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 1)] struct InstallProgress @@ -437,11 +437,11 @@ namespace Microsoft.Management.Deployment [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 1)] runtimeclass PackageCatalogInfo { - /// The package catalog's unique identifier. + /// The package catalog's unique identifier. /// SAMPLE VALUES: For OpenWindowsCatalog "Microsoft.Winget.Source_8wekyb3d8bbwe" /// For contoso sample on msdn "contoso" String Id { get; }; - /// The name of the package catalog. + /// The name of the package catalog. /// SAMPLE VALUES: For OpenWindowsCatalog "winget". /// For contoso sample on msdn "contoso" String Name { get; }; @@ -507,7 +507,7 @@ namespace Microsoft.Management.Deployment PackageCatalog PackageCatalog { get; }; /// DESIGN NOTE: - /// GetManifest from IPackageVersion in AppInstallerRepositorySearch is not implemented in V1. That class has + /// GetManifest from IPackageVersion in AppInstallerRepositorySearch is not implemented in V1. That class has /// a lot of fields and no one requesting it. /// Gets the manifest of this package version. /// virtual Manifest::Manifest GetManifest() = 0; @@ -649,7 +649,7 @@ namespace Microsoft.Management.Deployment Windows.Foundation.Collections.IVectorView<MatchResult> Matches { get; }; /// If true, the results were truncated by the given ResultLimit - /// USAGE NOTE: Windows Package Manager does not support result pagination, there is no way to continue + /// USAGE NOTE: Windows Package Manager does not support result pagination, there is no way to continue /// getting more results. Boolean WasLimitExceeded{ get; }; } @@ -660,8 +660,8 @@ namespace Microsoft.Management.Deployment { FindPackagesOptions(); - /// DESIGN NOTE: - /// This class maps to SearchRequest from AppInstallerRepositorySearch.h + /// DESIGN NOTE: + /// This class maps to SearchRequest from AppInstallerRepositorySearch.h /// That class is a container for data used to filter the available manifests in an package catalog. /// Its properties can be thought of as: /// (Query || Selectors...) && Filters... @@ -723,7 +723,7 @@ namespace Microsoft.Management.Deployment /// The details of the package catalog if it is not a composite. PackageCatalogInfo Info { get; }; - /// Opens a catalog. Required before searching. For remote catalogs (i.e. not Installed and Installing) this + /// Opens a catalog. Required before searching. For remote catalogs (i.e. not Installed and Installing) this /// may require downloading information from a server. Windows.Foundation.IAsyncOperation<ConnectResult> ConnectAsync(); ConnectResult Connect(); @@ -774,7 +774,7 @@ namespace Microsoft.Management.Deployment { /// The default experience for the installer. Installer may show some UI. Default, - /// Runs the installer in silent mode. This suppresses the installer's UI to the extent + /// Runs the installer in silent mode. This suppresses the installer's UI to the extent /// possible (installer may still show some required UI). Silent, /// Runs the installer in interactive mode. @@ -788,23 +788,23 @@ namespace Microsoft.Management.Deployment { InstallOptions(); - /// Optionally specifies the version from the package to install. If unspecified the version matching + /// Optionally specifies the version from the package to install. If unspecified the version matching /// CatalogPackage.GetLatestVersion() is used. PackageVersionId PackageVersionId; /// Specifies alternate location to install package (if supported). String PreferredInstallLocation; - /// User or Machine. + /// User or Machine. PackageInstallScope PackageInstallScope; /// Silent, Interactive, or Default PackageInstallMode PackageInstallMode; - /// Directs the logging to a log file. If provided, the installer must have write access to the file + /// Directs the logging to a log file. If provided, the installer must have write access to the file String LogOutputPath; /// Continues the install even if the hash in the catalog does not match the linked installer. Boolean AllowHashMismatch; /// Allows Store installs when Store Client is disabled. Boolean BypassIsStoreClientBlockedPolicyCheck; - /// A string that will be passed to the installer. + /// A string that will be passed to the installer. /// IMPLEMENTATION NOTE: maps to "--override" in the winget cmd line String ReplacementInstallerArguments; @@ -821,8 +821,8 @@ namespace Microsoft.Management.Deployment PackageManager(); /// Get the available catalogs. Each source will have a separate catalog. - /// This does not open the catalog. These catalogs can be used individually or merged with CreateCompositePackageCatalogAsync. - /// IMPLEMENTATION NOTE: This is a list of sources returned by Windows Package Manager source list + /// This does not open the catalog. These catalogs can be used individually or merged with CreateCompositePackageCatalogAsync. + /// IMPLEMENTATION NOTE: This is a list of sources returned by Windows Package Manager source list Windows.Foundation.Collections.IVectorView<PackageCatalogReference> GetPackageCatalogs(); /// Get a built in catalog PackageCatalogReference GetPredefinedPackageCatalog(PredefinedPackageCatalog predefinedPackageCatalog); @@ -838,7 +838,7 @@ namespace Microsoft.Management.Deployment Windows.Foundation.IAsyncOperationWithProgress<InstallResult, InstallProgress> InstallPackageAsync(CatalogPackage package, InstallOptions options); } - /// Force midl3 to generate vector marshalling info. + /// Force midl3 to generate vector marshalling info. declare { interface Windows.Foundation.Collections.IVector<PackageCatalog>; diff --git a/doc/specs/#980 - Apps and Features entries version mapping.md b/doc/specs/#980 - Apps and Features entries version mapping.md @@ -11,7 +11,7 @@ For [#980](https://github.com/microsoft/winget-cli/issues/980) ## Abstract -Some Winget packages may have the concept of marketing version and internal version. So they may have different version values in Winget manifest and in Apps and Features registry entry. Usually, the marketing version will be in the Winget manifest and internal version will be written in the Apps and Features registry. +Some Winget packages may have the concept of marketing version and internal version. So they may have different version values in Winget manifest and in Apps and Features registry entry. Usually, the marketing version will be in the Winget manifest and internal version will be written in the Apps and Features registry. In this doc, Winget manifest version will be referred to as Winget version and Apps and Features version in registry will be referred to as ARP version. @@ -29,23 +29,23 @@ Versions are parsed by: 3. Saving any remaining, non-digits as a supplemental value 4. If a version part's value is 0 and it does not have supplemental value(non-digits), the version part is dropped(i.e. `1.0.0` will be parsed internally as version with only one part with value 1) -Versions are compared by: - for each part in each version -  if both sides have no more parts, return equal -  else if one side has no more parts, it is less -  else if integers not equal, return comparison of integers -  else if only one side has a non-empty string part, it is less -  else if string parts not equal, return comparison of strings - -For example: -Version `1` is less than version `2` -Version `1.0.0` is less than version `2.0.0` -Version `0.0.1-alpha` is less than version `0.0.2-alpha` -Version `0.0.1-beta` is less than version `0.0.2-alpha` -Version `0.0.1-alpha` is less than version `0.0.1-beta` -Version `0.0.1-alpha` is less than version `0.0.1` -Version `13.9.8` is less than version `14.0` -Version `1.0` is equal to version `1.0.0` +Versions are compared by: + for each part in each version +  if both sides have no more parts, return equal +  else if one side has no more parts, it is less +  else if integers not equal, return comparison of integers +  else if only one side has a non-empty string part, it is less +  else if string parts not equal, return comparison of strings + +For example: +Version `1` is less than version `2` +Version `1.0.0` is less than version `2.0.0` +Version `0.0.1-alpha` is less than version `0.0.2-alpha` +Version `0.0.1-beta` is less than version `0.0.2-alpha` +Version `0.0.1-alpha` is less than version `0.0.1-beta` +Version `0.0.1-alpha` is less than version `0.0.1` +Version `13.9.8` is less than version `14.0` +Version `1.0` is equal to version `1.0.0` Both Winget version and ARP version will use the above parsing and comparison logic. @@ -58,7 +58,7 @@ Installers: DisplayVersion: # Used as ARP version for version comparison if the key is present ``` -Some packages may assign different build numbers to their internal versions for different installers. Winget will treat the ARP versions as a version range. +Some packages may assign different build numbers to their internal versions for different installers. Winget will treat the ARP versions as a version range. For example, for below manifest, the ARP version range will be [10.0.0.1, 10.0.0.4], any ARP version between 10.0.0.1 and 10.0.0.4(both inclusive) will be treated as a match(i.e. mapped to Winget version 1.0.0). ```YAML PackageVersion: 1.0.0 @@ -103,8 +103,8 @@ Winget version: 1.0.0 2.0.0 3.0.0 ARP version range: [10.0, 10.5] [7.0, 7.5] [13.0, 13.7] ``` -ARP version `10.4` will be mapped as Winget version `1.0.0`. -ARP version `13.4` will be mapped as Winget version `3.0.0`. +ARP version `10.4` will be mapped as Winget version `1.0.0`. +ARP version `13.4` will be mapped as Winget version `3.0.0`. ARP version `9.4` will be mapped as Winget version `Unknown`. #### Full version mapping performed @@ -121,23 +121,23 @@ Winget will perform following mapping: A special "less than"("< ") and "greater than"("> ") version concept will be used. This is to indicate the version is less than or greater than the closest version Winget is known of. UI/UX change to the output is described in later UI/UX section. -For above version mapping: -ARP version `10.0` will be mapped as Winget version `1.0.0`. -ARP version `11.7` will be mapped as less than Winget version 3.0.0(`< 3.0.0`). -ARP version `12.7` will be mapped as less than Winget version 4.0.0(`< 4.0.0`). -ARP version `14.0` will be mapped as greater than Winget version 4.0.0(`> 4.0.0`). +For above version mapping: +ARP version `10.0` will be mapped as Winget version `1.0.0`. +ARP version `11.7` will be mapped as less than Winget version 3.0.0(`< 3.0.0`). +ARP version `12.7` will be mapped as less than Winget version 4.0.0(`< 4.0.0`). +ARP version `14.0` will be mapped as greater than Winget version 4.0.0(`> 4.0.0`). ARP version `2.0.0` will be mapped as less than Winget version 1.0.0(`< 1.0.0`)(Once ARP version mapping logic is applied, Winget will only look at ARP version range, though `2.0.0` exactly matches one Winget version). For version comparison with special "less than" or "greater than", the "less than" or "greater than" only applies when compared to the specific version, for comparing to other versions, "less than" or "greater than" could be considered as ignored. -For example: -Version `< 3.0` is less than version `3.0` -Version `< 3.0` is greater than version `2.9`(because `3.0` is greater than `2.9`) -Version `< 3.0` is less than version `4.0` -Version `< 3.0` is less than version `> 3.0` -Version `> 3.0` is greater than version `3.0` -Version `> 3.0` is less than version `3.1` (because `3.0` is less than `3.1`) -Version `> 3.0` is greater than version `2.9` +For example: +Version `< 3.0` is less than version `3.0` +Version `< 3.0` is greater than version `2.9`(because `3.0` is greater than `2.9`) +Version `< 3.0` is less than version `4.0` +Version `< 3.0` is less than version `> 3.0` +Version `> 3.0` is greater than version `3.0` +Version `> 3.0` is less than version `3.1` (because `3.0` is less than `3.1`) +Version `> 3.0` is greater than version `2.9` **Note:** It is recommended for package authors to update ARP version info for all package versions of a package for better version mapping if this feature is to be used for a package. diff --git a/doc/specs/Configuration-COM-API.md b/doc/specs/Configuration-COM-API.md @@ -505,7 +505,7 @@ namespace ConfigurationSample fileOperation.AsTask().Wait(); var file = fileOperation.GetResults(); OpenConfigurationSetResult result = processor.OpenConfigurationSet(file); - + if (result.Set != null) { return result.Set; @@ -802,4 +802,4 @@ namespace ConfigurationSample } } -```- \ No newline at end of file +``` diff --git a/doc/troubleshooting/README.md b/doc/troubleshooting/README.md @@ -103,7 +103,7 @@ At line:1 char:1 ``` These errors most commonly occur for one of following reasons. Please try out the following troubleshooting steps. -1. The App Installer does not contain the Windows Package Manager. You should check to ensure the version of App Installer is greater than 1.11.11451. You can check by executing the following command in PowerShell: +1. The App Installer does not contain the Windows Package Manager. You should check to ensure the version of App Installer is greater than 1.11.11451. You can check by executing the following command in PowerShell: >`Get-AppxPackage microsoft.desktopappinstaller` @@ -122,7 +122,7 @@ If the above guidelines do not resolve the problem, please open an issue with de This error is related to networking and maps to "ERROR_INTERNET_CANNOT_CONNECT". It could be related to TLS (Transport Layer Security). -This issue may be resolved by enabling TLS 1.2. +This issue may be resolved by enabling TLS 1.2. It may also be resolved by flushing your DNS cache. Instructions are available at [Microsoft Learn](https://learn.microsoft.com/windows-server/administration/windows-commands/ipconfig). diff --git a/doc/windows-package-manager-release-roadmap.md b/doc/windows-package-manager-release-roadmap.md @@ -54,4 +54,4 @@ Incoming issues/asks/etc. are triaged several times a week, labelled appropriate * P1/2 issues/features/asks assigned to the current or future milestone. * Issues/features/asks not on our list of the features of next release is assigned to the [Windows Package Manager Backlog](https://github.com/microsoft/winget-cli/milestone/2) for subsequent triage, prioritization & scheduling. -#### Feature Priorities will be influenced by community feedback on issues.- \ No newline at end of file +#### Feature Priorities will be influenced by community feedback on issues. diff --git a/doc/windows/package-manager/package/binary-validation-errors.md b/doc/windows/package-manager/package/binary-validation-errors.md @@ -4,7 +4,7 @@ The Windows Package Manager goes to great lengths to create an excellent user ex To that end, a key test we use for the Windows Package Manager is to ensure that all installers will install without warnings on a variety of popular antivirus configurations. While Windows provides Defender as a built-in antivirus program, many enterprise customers and users employ a wide range of antivirus software. -Therefore, each submission to the Windows Package Manager will be run through several antivirus programs. These programs all have different virus detection algorithms for identifying [Potentially unwanted application (PUA)](https://docs.microsoft.com/windows/security/threat-protection/intelligence/criteria) and malware. +Therefore, each submission to the Windows Package Manager will be run through several antivirus programs. These programs all have different virus detection algorithms for identifying [Potentially unwanted application (PUA)](https://docs.microsoft.com/windows/security/threat-protection/intelligence/criteria) and malware. ## Application failures @@ -18,4 +18,4 @@ A previously mentioned, the Windows Package Manager repository is not allowed ap ### What if I cannot remove that code? -Occasionally, genuine tools used for debugging and low-level activities, will appear as PUA to the antivirus vendors. This is because the code necessary to do the debugging will have a similar signature to unwanted software. Even though this is a legitimate use of that coding practice, unfortunately we are unable to allow those applications into the Windows Package Manager repository.- \ No newline at end of file +Occasionally, genuine tools used for debugging and low-level activities, will appear as PUA to the antivirus vendors. This is because the code necessary to do the debugging will have a similar signature to unwanted software. Even though this is a legitimate use of that coding practice, unfortunately we are unable to allow those applications into the Windows Package Manager repository. diff --git a/doc/windows/package-manager/package/manifest.md b/doc/windows/package-manager/package/manifest.md @@ -67,7 +67,7 @@ Publisher: # The name of the publisher. PackageName: # The name of the application. License: # The license of the application. ShortDescription: # The description of the application. -Installers: +Installers: - Architecture: # Enumeration of supported architectures. InstallerType: # Enumeration of supported installer types (exe, msi, msix, inno, wix, nullsoft, appx). InstallerUrl: # Path to download installation file. @@ -88,7 +88,7 @@ Publisher: Microsoft PackageName: Windows Terminal License: MIT ShortDescription: The new Windows Terminal, a tabbed command line experience for Windows. -Installers: +Installers: - Architecture: x64 InstallerType: msix InstallerUrl: https://github.com/microsoft/terminal/releases/download/v1.6.10571.0/Microsoft.WindowsTerminal_1.6.10571.0_8wekyb3d8bbwe.msixbundle @@ -101,7 +101,7 @@ ManifestVersion: 1.4.0 #### Multiple File Example In order to provide the best user experience, manifests should contain as much meta-data as possible. In order to separate concerns for validating installers and providing localized meta-data manifests will be split into multiple files. The minimum number of YAML files for this kind of manifest is three. Additional -locales should also be provided. +locales should also be provided. * A [version](https://github.com/microsoft/winget-cli/blob/master/schemas/JSON/manifests/v1.4.0/manifest.version.1.4.0.json) file * The [default locale](https://github.com/microsoft/winget-cli/blob/master/schemas/JSON/manifests/v1.4.0/manifest.defaultLocale.1.4.0.json) file * An [installer](https://github.com/microsoft/winget-cli/blob/master/schemas/JSON/manifests/v1.4.0/manifest.installer.1.4.0.json) file @@ -134,7 +134,7 @@ PackageURL: https://docs.microsoft.com/windows/terminal/ License: MIT LicenseURL: https://github.com/microsoft/terminal/blob/master/LICENSE ShortDescription: The new Windows Terminal, a tabbed command line experience for Windows. -Tags: +Tags: - console - command-line - shell @@ -168,14 +168,14 @@ Path: manifests / m / Microsoft / WindowsTerminal / 1.6.10571.0 / Microsoft.Wind ```YAML PackageIdentifier: Microsoft.WindowsTerminal PackageVersion: 1.6.10571.0 -Platform: +Platform: - Windows.Desktop MinimumOSVersion: 10.0.18362.0 InstallerType: msix -InstallModes: +InstallModes: - silent PackageFamilyName: Microsoft.WindowsTerminal_8wekyb3d8bbwe -Installers: +Installers: - Architecture: x64 InstallerUrl: https://github.com/microsoft/terminal/releases/download/v1.6.10571.0/Microsoft.WindowsTerminal_1.6.10571.0_8wekyb3d8bbwe.msixbundle InstallerSha256: 092aa89b1881e058d31b1a8d88f31bb298b5810afbba25c5cb341cfa4904d843 @@ -200,8 +200,8 @@ ManifestVersion: 1.4.0 You can often figure out what silent `Switches` are available for an installer by passing in a `-?` to the installer from the command line. Here are some common silent `Switches` that can be used for different installer types. -| Installer | Command | Documentation | -| :--- | :-- | :--- | +| Installer | Command | Documentation | +| :--- | :-- | :--- | | MSI | `/q` | [MSI Command-Line Options](https://docs.microsoft.com/windows/win32/msi/command-line-options) | | InstallShield | `/s` | [InstallShield Command-Line Parameters](https://docs.flexera.com/installshield19helplib/helplibrary/IHelpSetup_EXECmdLine.htm) | | Inno Setup | `/SILENT or /VERYSILENT` | [Inno Setup documentation](https://jrsoftware.org/ishelp/) | diff --git a/doc/windows/package-manager/package/repository.md b/doc/windows/package-manager/package/repository.md @@ -93,8 +93,8 @@ After you push your changes, return to [https://github.com/microsoft/winget-pkgs When you create a **pull request**, this will start an automated process that validates the manifests and verifies your **pull request**. During this process we will run tests against the installer and installed binaries to validate the submission. -We add labels to your **pull request** so you can track its progress. For more information on labels and the process see [Windows Package Manager validation](winget-validation.md). +We add labels to your **pull request** so you can track its progress. For more information on labels and the process see [Windows Package Manager validation](winget-validation.md). Once complete, your submission will be manually reviewed by a moderator, and after it is approved, your application will be added to the Windows Package Manager catalog. -If there is ever an error during the process, you will be notified and our labels and bot will assist you in fixing your submission. For the list of common errors, see [Windows Package Manager validation](winget-validation.md). +If there is ever an error during the process, you will be notified and our labels and bot will assist you in fixing your submission. For the list of common errors, see [Windows Package Manager validation](winget-validation.md). diff --git a/doc/windows/package-manager/package/windows-package-manager-policies.md b/doc/windows/package-manager/package/windows-package-manager-policies.md @@ -8,7 +8,7 @@ Thank you for your interest in providing a Product to the Windows Package Manager repository. -"Product" means content in whatever form including, but not limited to, apps, games, titles, and any additional content sold or offered from within a Product. +"Product" means content in whatever form including, but not limited to, apps, games, titles, and any additional content sold or offered from within a Product. "Submission" means [**Pull Request**](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) of manifest files and includes but is not limited to the "Product" and metadata about the "Product". @@ -69,10 +69,10 @@ All aspects of the Product should accurately describe the functions, features an ### 1.1.3 -The Product must have distinct and informative metadata and must provide a valuable and quality user experience. +The Product must have distinct and informative metadata and must provide a valuable and quality user experience. ### 1.1.4 -The [InstallerUrl](https://github.com/microsoft/winget-cli/blob/master/schemas/JSON/manifests/v1.4.0/manifest.defaultLocale.1.4.0.json) must be the ISVs release location for the Product. Products from download websites will not be allowed. +The [InstallerUrl](https://github.com/microsoft/winget-cli/blob/master/schemas/JSON/manifests/v1.4.0/manifest.defaultLocale.1.4.0.json) must be the ISVs release location for the Product. Products from download websites will not be allowed. ### 1.2 Security @@ -278,4 +278,3 @@ User Generated Content (UGC) is content that users contribute to an app or Produ - [Change history for Windows Package Manager Policy History](windows-package-manager-policies-change-history.md) - [Windows Package Manager Code of Conduct](https://github.com/microsoft/winget-pkgs/blob/master/CODE_OF_CONDUCT.md) - [Windows Package Manager Contributing requirements](https://github.com/microsoft/winget-pkgs/blob/master/README.md) - - \ No newline at end of file diff --git a/doc/windows/package-manager/winget/export.md b/doc/windows/package-manager/winget/export.md @@ -24,7 +24,7 @@ The **export** command is often used to create a file that you can share with ot The following arguments are available. | Argument | Description | -|-------------|-------------| +|-------------|-------------| | **-o,--output** | Path to the JSON file to be created ## Options @@ -32,7 +32,7 @@ The following arguments are available. The options allow you to customize the export experience to meet your needs. | Option | Description | -|--------|-------------| +|--------|-------------| | **-s, --source** | [optional] Specifies a source to export files from. Use this option when you only want files from a specific source. | | **--include-versions** | [optional] Includes the version of the app currently installed. Use this option if you want a specific version. By default, unless specified, [**import**](import.md) will use latest. | | **--accept-source-agreements** | Accept all source agreements during source operations | @@ -47,7 +47,7 @@ The driving force behind the **export** command is the JSON file. As mentioned, The JSON file includes the following hierarchy: | Entry | Description | -|-------------|-------------| +|-------------|-------------| | **Sources** | The sources application manifests come from. | | **Packages** | The collection of packages to install. | | **PackageIdentifier** | The Windows Package Manager package identifier used to specify the package. | @@ -55,7 +55,7 @@ The JSON file includes the following hierarchy: ## exporting files -When the Windows Package Manager exports the JSON file, it attempts to export all the applications installed on the PC. If the **winget export** command is not able to match an application to an application from an available **source**, the export command will show a warning. +When the Windows Package Manager exports the JSON file, it attempts to export all the applications installed on the PC. If the **winget export** command is not able to match an application to an application from an available **source**, the export command will show a warning. Note: matching an application depends on metadata in the manifest from a configured source, and metadata in Add / Remove Programs in Windows based on the package installer. diff --git a/doc/windows/package-manager/winget/hash.md b/doc/windows/package-manager/winget/hash.md @@ -31,7 +31,7 @@ The following arguments are available: The following options are available: | Option | Description | -|--------|-------------| +|--------|-------------| | **-m, --msix** | Specifies that the hash command will also create the SHA-256 SignatureSha256 for use with MSIX installers. | | **-?, --help** | Gets additional help on this command. | | **--wait** | Prompts the user to press any key before exiting | diff --git a/doc/windows/package-manager/winget/import.md b/doc/windows/package-manager/winget/import.md @@ -22,7 +22,7 @@ The **import** command is often used to share your developer environment or buil The following arguments are available. | Argument | Description | -|-------------|-------------| +|-------------|-------------| | **-i, --import-file** | JSON file describing the packages to install ## Options @@ -30,7 +30,7 @@ The following arguments are available. The options allow you to customize the import experience to meet your needs. | Option | Description | -|-------------|-------------| +|-------------|-------------| | **--ignore-unavailable** | Suppresses errors if the app requested is unavailable | | **--ignore-versions** | Ignores versions specified in the JSON file and installs the latest available version | | **--no-upgrade** | Skips upgrade if an installed version already exists | @@ -47,7 +47,7 @@ The driving force behind the **import** command is the JSON file. You can find The JSON file includes the following hierarchy: | Entry | Description | -|-------------|-------------| +|-------------|-------------| | **Sources** | The sources application manifests come from. | | **Packages** | The collection of packages to install. | | **PackageIdentifier** | The Windows Package Manager package identifier used to specify the package. | diff --git a/doc/windows/package-manager/winget/index.md b/doc/windows/package-manager/winget/index.md @@ -26,7 +26,7 @@ There are several ways to install the **winget** tool: Installer behavior can be different depending on whether you are running **winget** with administrator privileges. -* When running **winget** without administrator privileges, some applications may [require elevation](https://docs.microsoft.com/windows/security/identity-protection/user-account-control/how-user-account-control-works) to install. When the installer runs, Windows will prompt you to [elevate](https://docs.microsoft.com/windows/security/identity-protection/user-account-control/how-user-account-control-works). If you choose not to elevate, the application will fail to install. +* When running **winget** without administrator privileges, some applications may [require elevation](https://docs.microsoft.com/windows/security/identity-protection/user-account-control/how-user-account-control-works) to install. When the installer runs, Windows will prompt you to [elevate](https://docs.microsoft.com/windows/security/identity-protection/user-account-control/how-user-account-control-works). If you choose not to elevate, the application will fail to install. * When running **winget** in an Administrator Command Prompt, you will not see [elevation prompts](https://docs.microsoft.com/windows/security/identity-protection/user-account-control/how-user-account-control-works) if the application requires it. Always use caution when running your command prompt as an administrator, and only install applications you trust. @@ -52,7 +52,7 @@ The current preview of the **winget** tool supports the following commands. | [source](source.md) | Adds, removes, and updates the Windows Package Manager repositories accessed by the **winget** tool. | | [search](search.md) | Searches for an application. | | [list](list.md) | Display installed packages. | -| [upgrade](upgrade.md) | Upgrades the given package. | +| [upgrade](upgrade.md) | Upgrades the given package. | | [uninstall](uninstall.md) | Uninstalls the given package. | | [hash](hash.md) | Generates the SHA256 hash for the installer. | | [validate](validate.md) | Validates a manifest file for submission to the Windows Package Manager repository. | @@ -97,13 +97,13 @@ The current version of the **winget** tool supports the following types of insta You can author batch scripts and PowerShell scripts to install multiple applications. ```CMD -@echo off -Echo Install Powertoys and Terminal -REM Powertoys -winget install Microsoft.Powertoys -if %ERRORLEVEL% EQU 0 Echo Powertoys installed successfully. -REM Terminal -winget install Microsoft.WindowsTerminal +@echo off +Echo Install Powertoys and Terminal +REM Powertoys +winget install Microsoft.Powertoys +if %ERRORLEVEL% EQU 0 Echo Powertoys installed successfully. +REM Terminal +winget install Microsoft.WindowsTerminal if %ERRORLEVEL% EQU 0 Echo Terminal installed successfully. %ERRORLEVEL% ``` diff --git a/doc/windows/package-manager/winget/install.md b/doc/windows/package-manager/winget/install.md @@ -8,7 +8,7 @@ ms.localizationpriority: medium # install command (winget) -The **install** command of the [winget](index.md) tool installs the specified application. Use the [**search**](search.md) command to identify the application you want to install. +The **install** command of the [winget](index.md) tool installs the specified application. Use the [**search**](search.md) command to identify the application you want to install. The **install** command requires that you specify the exact string to install. If there is any ambiguity, you will be prompted to further filter the **install** command to an exact application. @@ -26,7 +26,7 @@ The following command aliases are available: \ The following arguments are available. | Argument | Description | -|-------------|-------------| +|-------------|-------------| | **-q, --query** | The query used to search for an app. | ## Options @@ -34,17 +34,17 @@ The following arguments are available. The options allow you to customize the install experience to meet your needs. | Option | Description | -|-------------|-------------| +|-------------|-------------| | **-m, --manifest** | Must be followed by the path to the manifest (YAML) file. You can use the manifest to run the install experience from a [local YAML file](#local-install). | -| **--id** | Limits the install to the ID of the application. | -| **--name** | Limits the search to the name of the application. | -| **--moniker** | Limits the search to the moniker listed for the application. | -| **-v, --version** | Enables you to specify an exact version to install. If not specified, latest will install the highest versioned application. | +| **--id** | Limits the install to the ID of the application. | +| **--name** | Limits the search to the name of the application. | +| **--moniker** | Limits the search to the moniker listed for the application. | +| **-v, --version** | Enables you to specify an exact version to install. If not specified, latest will install the highest versioned application. | | **-s, --source** | Restricts the search to the source name provided. Must be followed by the source name. | | **--scope** | Select install scope (user or machine) | -| **-e, --exact** | Uses the exact string in the query, including checking for case-sensitivity. It will not use the default behavior of a substring. | -| **-i, --interactive** | Runs the installer in interactive mode. The default experience shows installer progress. | -| **-h, --silent** | Runs the installer in silent mode. This suppresses all UI. The default experience shows installer progress. | +| **-e, --exact** | Uses the exact string in the query, including checking for case-sensitivity. It will not use the default behavior of a substring. | +| **-i, --interactive** | Runs the installer in interactive mode. The default experience shows installer progress. | +| **-h, --silent** | Runs the installer in silent mode. This suppresses all UI. The default experience shows installer progress. | | **-o, --log** | Directs the logging to a log file. You must provide a path to a file that you have the write rights to. | | **--override** | A string that will be passed directly to the installer. | | **-l, --location** | Location to install to (if supported). | @@ -97,7 +97,7 @@ If the query provided to **winget** does not result in a single application, the The best way to limit the selection to one file is to use the **id** of the application combined with the **exact** query option. For example: ```CMD -winget install --id Git.Git -e +winget install --id Git.Git -e ``` If multiple sources are configured, it is possible to have duplicate entries. Specifying a source is required to further disambiguate. @@ -113,7 +113,7 @@ The **manifest** option enables you to install an application by passing in a YA Usage: `winget install --manifest <path>` | Option | Description | -|---------|-------------| +|---------|-------------| | **-m, --manifest** | The path to the manifest of the application to install. | ### Log files diff --git a/doc/windows/package-manager/winget/list.md b/doc/windows/package-manager/winget/list.md @@ -1,6 +1,6 @@ --- title: features Command -description: Displays the list of listed apps and if an update is available. +description: Displays the list of listed apps and if an update is available. ms.date: 05/5/2021 ms.topic: overview ms.localizationpriority: medium @@ -12,7 +12,7 @@ The **list** command of the [winget](index.md) tool displays a list of the appli In addition, the **list** command will also display if an update is available for an app, and you can use the [**upgrade**](upgrade.md) command to update the app. -The **list** command also supports filters which can be used to limit your list query. +The **list** command also supports filters which can be used to limit your list query. ## Usage @@ -28,20 +28,20 @@ The following command aliases are available: \ The following arguments are available. | Argument | Description | -|-------------|-------------| +|-------------|-------------| | **-q,--query** | The query used to search for an app. | ## Options The options allow you to customize the list experience to meet your needs. | Option | Description | -|--------|-------------| +|--------|-------------| | **--id** | Limits the list to the ID of the application. | | **--name** | Limits the list to the name of the application. | | **--moniker** | Limits the list to the moniker listed for the application. | -| **-s, --source** | Restricts the list to the source name provided. Must be followed by the source name. | -| **--tag** | Filters results by tags. | -| **--command** | Filters results by command specified by the application. | +| **-s, --source** | Restricts the list to the source name provided. Must be followed by the source name. | +| **--tag** | Filters results by tags. | +| **--command** | Filters results by command specified by the application. | | **-n, --count** | Limits the number of apps displayed in one query. | | **-e, --exact** | Uses the exact string in the list query, including checking for case-sensitivity. It will not use the default behavior of a substring. | | **--scope** | Select installed package scope filter (user or machine). | diff --git a/doc/windows/package-manager/winget/returnCodes.md b/doc/windows/package-manager/winget/returnCodes.md @@ -152,7 +152,7 @@ ms.localizationpriority: medium | 0x8A150107 | -1978334969 | APPINSTALLER_CLI_ERROR_INSTALL_NO_NETWORK | This application requires internet connectivity. Connect to a network then try again. | | 0x8A150108 | -1978334968 | APPINSTALLER_CLI_ERROR_INSTALL_CONTACT_SUPPORT | This application encountered an error during installation. Contact support. | | 0x8A150109 | -1978334967 | APPINSTALLER_CLI_ERROR_INSTALL_REBOOT_REQUIRED_TO_FINISH | Restart your PC to finish installation. | -| 0x8A15010A | -1978334966 | APPINSTALLER_CLI_ERROR_INSTALL_REBOOT_REQUIRED_TO_INSTALL | +| 0x8A15010A | -1978334966 | APPINSTALLER_CLI_ERROR_INSTALL_REBOOT_REQUIRED_TO_INSTALL | Installation failed. Restart your PC then try again. | | 0x8A15010B | -1978334965 | APPINSTALLER_CLI_ERROR_INSTALL_REBOOT_INITIATED | Your PC will restart to finish installation. | | 0x8A15010C | -1978334964 | APPINSTALLER_CLI_ERROR_INSTALL_CANCELLED_BY_USER | You cancelled the installation. | @@ -210,4 +210,4 @@ Installation failed. Restart your PC then try again. | | 0x8A15C108 | -1978285816 | WINGET_CONFIG_ERROR_UNIT_IMPORT_MODULE | Loading the module for the configuration unit failed. | | 0x8A15C109 | -1978285815 | WINGET_CONFIG_ERROR_UNIT_INVOKE_INVALID_RESULT | The configuration unit returned an unexpected result during execution. | | 0x8A15C110 | -1978285814 | WINGET_CONFIG_ERROR_UNIT_SETTING_CONFIG_ROOT | A unit contains a setting that requires the config root. | -| 0x8A15C111 | -1978285813 | WINGET_CONFIG_ERROR_UNIT_IMPORT_MODULE_ADMIN | Loading the module for the configuration unit failed because it requires administrator privileges to run. |- \ No newline at end of file +| 0x8A15C111 | -1978285813 | WINGET_CONFIG_ERROR_UNIT_IMPORT_MODULE_ADMIN | Loading the module for the configuration unit failed because it requires administrator privileges to run. | diff --git a/doc/windows/package-manager/winget/search.md b/doc/windows/package-manager/winget/search.md @@ -8,7 +8,7 @@ ms.localizationpriority: medium # search command (winget) -The **search** command of the [winget](index.md) tool queries the sources for available applications that can be installed. +The **search** command of the [winget](index.md) tool queries the sources for available applications that can be installed. The **search** command can show all applications available, or it can be filtered down to a specific application. The **search** command is used typically to identify the string to use to install a specific application. @@ -68,7 +68,7 @@ The search commands supports a number of options or filters to help limit the re | Option | Description | --------------|-------------| -| **-e, --exact** | Uses the exact string in the query, including checking for case-sensitivity. It will not use the default behavior of a substring. | +| **-e, --exact** | Uses the exact string in the query, including checking for case-sensitivity. It will not use the default behavior of a substring. | | **-n, --count** | Restricts the output of the display to the specified count. | | **-s, --source** | Restricts the search to the specified [source](source.md) name. | diff --git a/doc/windows/package-manager/winget/settings.md b/doc/windows/package-manager/winget/settings.md @@ -9,7 +9,7 @@ ms.localizationpriority: medium # settings command (winget) The **settings** command of the [winget](index.md) tool allows you to customize your Windows Package Manager client experience. You can change defaults and try out experimental features that are enabled in your client. -The **settings** command will launch your default JSON editor. Windows by default will launch Notepad as an option. We recommend using a tool like [Visual Studio code](https://code.visualstudio.com/). +The **settings** command will launch your default JSON editor. Windows by default will launch Notepad as an option. We recommend using a tool like [Visual Studio code](https://code.visualstudio.com/). > You can easily install Visual Studio Code, by typing `winget install Microsoft.VisualStudioCode` @@ -35,7 +35,7 @@ The `source` settings involve configuration to the WinGet source. "source": { "autoUpdateIntervalInMinutes": 3 }, -``` +``` #### autoUpdateIntervalInMinutes @@ -58,7 +58,7 @@ The `visual` settings involve visual elements that are displayed by WinGet #### progressBar -Color of the progress bar that WinGet displays when not specified by arguments. +Color of the progress bar that WinGet displays when not specified by arguments. - accent (default) - retro diff --git a/doc/windows/package-manager/winget/uninstall.md b/doc/windows/package-manager/winget/uninstall.md @@ -27,7 +27,7 @@ The following command aliases are available: \ The following arguments are available. | Argument | Description | -|-------------|-------------| +|-------------|-------------| | **-q,--query** | The query used to search for an app. | ## Options @@ -35,7 +35,7 @@ The following arguments are available. The options allow you to customize the uninstall experience to meet your needs. | Option | Description | -|--------|-------------| +|--------|-------------| | **-m, --manifest** | Must be followed by the path to the manifest (YAML) file. You can use the manifest to run the uninstall experience from a [local YAML file](#local-uninstall). | | **--id** | Limits the uninstall to the ID of the application. | | **--name** | Limits the search to the name of the application. | @@ -63,7 +63,7 @@ Once you have successfully identified the application intended to uninstall, win ![uninstall command](images/uninstall-execute.png) - + ### Example queries The following example uninstalls a specific version of an application. diff --git a/doc/windows/package-manager/winget/validate.md b/doc/windows/package-manager/winget/validate.md @@ -27,7 +27,7 @@ The following arguments are available. The options allow you to customize the export experience to meet your needs. | Option | Description | -|--------|-------------| +|--------|-------------| | **-?, --help** | Get additional help on this command. | | **--wait** | Prompts the user to press any key before exiting. | | **--logs, --open-logs** | Open the default logs location. |