winget - O gerenciador de pacotes do Windows
Tags: productivity, tooling
Published: 2022-07-04 17:51:52

Os gerenciadores de pacotes são bem úteis no nosso dia-a-dia, e hoje temos uma grande variedade deles, nos mais diversos sistemas operacionais.
Certamente, se você já utilizou alguma distribuição do Linux, ou se você trabalha com desenvolvimento com NodeJS, você já utilizou algum gerenciador de pacotes.

Seja um `npm`, `yarn`, `brew`, `apt-get`, instalar um pacote fica tão fácil quanto executar um `apt install` ou um `npm i`.
Basta encontrar o pacote que você quer, e o gerenciador vai permitir que você instale, atualize e desinstale os pacotes sem dificuldades.

E apesar dos gerenciadores de pacotes serem bem comuns para quem usa Linux (e o Unix no geral) ou NodeJS, isso não acontece tanto no Windows para a instalação de aplicações.
Temos já a bastante tempo um bom gerenciador de pacotes para Windows chamado [Chocolatey](https://chocolatey.org/), porém ele não é tão popular.

Querendo reverter essa situação, e facilitar a instalação e gerenciamento de aplicações no Windows, a Microsoft resolveu desenvolver e lançar o Windows Package Manager, ou `winget`.

Anunciado em maio de 2020, quando foi lançado em versão preview, agora um ano depois temos o lançamento da primeira versão final disponível.

# Instalando o winget

Se você utiliza uma versão _Insider_ do Windows, é provável que você já tenha o winget disponível na sua máquina para utilizar.

Caso contrário, você pode instalar de duas formas: pela Microsoft Store ou manualmente.

Recomendo que a instalação seja feita pela Microsoft Store, que assim você receberá atualizações automaticamente.
Para isso, instale o [Instalador de Aplicativo](https://www.microsoft.com/pt-br/p/app-installer/9nblggh4nns1) disponível na loja que ele já traz consigo também o comando `winget`.

Já para instalar manualmente, vá até o [repositório do winget-cli](https://github.com/microsoft/winget-cli), na página de tags, e faça o download da versão mais recente disponível (que no meu caso é a v1.0.11451).

![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_download_instalador.png)

_Se der algum erro durante a instalação manual, é possível que você precise instalar antes um componente adicional no Windows (o **VC++ v14 Desktop Framework Package**). Você pode ver como instalar este componente [aqui](https://docs.microsoft.com/en-us/troubleshoot/cpp/c-runtime-packages-desktop-bridge#how-to-install-and-update-desktop-framework-packages)._

E pronto! Depois de instalar, abra um terminal (preferencialmente o PowerShell) e execute o comando `winget -v`. Se tudo tiver sido instalado corretamente, será exibida a versão atual da ferramenta.

![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_version.png)

# Encontrando um pacote

Com o winget instalado, você precisa encontrar os pacotes que pode instalar.
Os pacotes disponíveis ficam armazenados em um repositório no github através de arquivos de manifestos, contendo todos os dados referentes aos pacotes.
O interessante é que esse repositório é público e mantido pela comunidade, e qualquer pessoa pode fazer um pedido de inclusão de uma nova aplicação (até mesmo você!). Esse repositório é o [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs).

Até por conta disto, nem todas as aplicações que você pode desejar já vão estar disponíveis atualmente para instalação pelo winget, porém a comunidade, a cada dia, envia novos pacotes para estarem disponíveis.

Mas hoje já temos uma grande quantidade de aplicações disponíveis, como o NodeJS, VSCode, Windows Terminal, o navegador Edge, o Docker Desktop, etc. Sem dúvida nenhuma a maioria dos programas que você utiliza já estarão disponíveis.

Além de olhar diretamente no repositório dos pacotes, você também pode utilizar o comando _[list](#list)_ para listar todos os pacotes disponíveis para instalação, ou o comando _[search](#search)_ para buscar um pacote em específico.

# Comandos disponíveis

Estes são os principais comandos disponíveis no winget:

- [Install](#install)
- [Show](#show)
- [Search](#search)
- [List](#list)
- [Upgrade](#upgrade)
- [Uninstall](#uninstall)
- [Settings](#settings)
- [Import e Export](#import-e-export)

Se quiser mais detalhes sobre algum comando, você pode utilizar o `--help`, tanto no próprio winget (`winget --help`), ou em algum comando específico (como `winget install --help`).

## Install

Para instalar um pacote é bem simples: encontre o pacote desejado, copie o nome ou ID dele, e execute o comando de instalação. O winget fará o trabalho de baixar o instalador necessário e executar a instalação com o mínimo de interação necessária.
Idealmente, sempre execute o comando de instalação passando o ID do pacote desejado, para garantir que é o pacote correto que será instalado.
Caso ocorra alguma ambiguidade no nome fornecido, a ferramenta irá mostrar as opções para que você reexecute o comando passando o ID.

![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_install.png)

## Show

Mostra as informações de um pacote, como a versão, o autor, descrição, link, etc.
_Apenas cuidado, porque se for executado sem passar nenhum pacote, vai listar todos os pacotes disponíveis para instalação, o que pode ser bastante coisa e pode demorar._

![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_show.png)

## Search

Além de poder encontrar um pacote direto no repositório, você pode utilizar o comando `search` que permite buscar um pacote entre todos os disponíveis.
Serão listados todos os pacotes encontrados com o termo informado, e a partir daí você pode obter o ID do pacote desejado para instalação.

![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_search.png)

## List

Lista todos os programas instalados na máquina, incluindo aqueles que não tenham sido instalados pelo winget. Isso é útil para verificar se alguma aplicação específica esteja instalada, não importando a origem.

Caso você queira lista somente os pacotes instalados pelo winget, utilize o parâmetro `-s winget`
![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_list.png)

## Upgrade

Atualiza um pacote para a versão mais recente. Basta executar o comando passando o ID do pacote que se deseja atualizar.
Caso o comando seja executado sem passar nenhum pacote (apenas _winget upgrade_), serão listados todos os pacotes disponíveis para atualização, incluindo a versão atual e a versão disponível.

![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_upgrade.png)

## Uninstall

Desinstala um pacote informado.

![](https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_uninstall.png)

## Settings

Abre o arquivo de configuração do winget, permitindo que você altere algumas opções da ferramenta.
Você pode verificar [aqui](https://github.com/microsoft/winget-cli/blob/master/doc/Settings.md) as configurações disponíveis.

## Import e Export

O winget possui mais dois outros comandos que hoje vejo que são os mais úteis dessa ferramente.

Se tratam dos comandos `export` e o `import`.

O comando `export` gera um arquivos `.json` com todos os pacotes instalados na máquina que estão disponíveis pelo `winget`.

```powershell
winget export -o 'c:\temp\winget.json'
```

Já o comando `import` faz o inverso: a partir de um desses arquivos, faz a instalação (ou atualização) de todos os pacotes que estejam listados.

```powershell
winget import -i 'c:\temp\winget.json'
```

Isso é muito útil em várias situações: se você costuma trocar de máquina com frequência, você consegue fácilmente fazer a preparação e instalar todas as ferramentas que você usa.
Como o comando de import também atualiza os programas caso eles já estejam instalados, você pode executar este comando periodicamente para manter as aplicações que você mais usa sempre nas versões mais recentes.

Um outro uso bem interessante do winget é se você trabalha com infraestrutura e precisa fazer a instalação e preparação de máquinas para outras pessoas com frequência.
Basta copiar o arquivo com os pacotes para a nova máquina e rodar o comando de importação que sem muita demora todas as aplicações necessárias são instaladas.
Você pode facilmente manter arquivos diferentes dependendo do setor que a pessoa trabalha, cada um com as aplicações necessárias.

_E você, vê mais algum outro uso para o winget?_

_Caso tenha curiosidade, mantenho meu arquivo `winget.json` [neste repositório](https://github.com/lfrigodesouza/WindowsTerminal/blob/master/winget.json) do GitHub, facilitando ainda mais a instalação de qualquer máquina. Sinta-se a vontade para dar uma olhada!_