Chocolatey

Instalación, creación de paquetes, automatización y despliegue


Introducción


Esta guía fue diseñada para introducir a los usuarios en el uso de Chocolatey, el potente y flexible gestor de paquetes para Windows, abarcando desde su instalación inicial hasta la creación, aprovisionamiento y publicación de paquetes personalizados para la automatización y gestión eficiente del software.

🔧 Instalación de Chocolatey

📋Requisitos Previos

Antes de instalar Chocolatey, asegúrate de cumplir con los siguientes requisitos:

  1. Sistema operativo: Windows 7 SP1 / Windows Server 2008 R2 SP1 o superior.
  2. Acceso a una cuenta con privilegios de administrador
  3. Conexión a Internet para descargar los paquetes.
  4. PowerShell 3.0+ ( o superior).

Guía rápida y detallada para instalar y verificar Chocolatey, el gestor de paquetes para Windows.

  1. Abrir PowerShell como Administrador
    • Pulsa Inicio → busca PowerShell → clic derecho → Ejecutar como administrador.
                                       Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
                             

✅ Verificar la Instalación

Una vez completada la instalación, abre una nueva ventana de PowerShell o CMD y ejecuta:

                                 choco --version
                         

🧪 Prueba Rápida

Instala un paquete simple como 7zip para verificar que Chocolatey funciona correctamente:

                                choco install 7zip -y
                         

🛠️ Solución de Problemas Comunes

Problema Solución
Choco no se reconoce como un comando Cierra y vuelve a abrir PowerShell/CMD. Asegúrate de que la ruta C:\ProgramData\chocolatey\bin esté en la variable de entorno PATH.
Error de permisos Asegúrate de ejecutar PowerShell como administrador.
Fallo al descargar el script Verifica tu conexión a Internet y asegúrate de que no hay un firewall o proxy bloqueando https://community.chocolatey.org.

📁 Ubicaciones Importantes

  • Chocolatey: C:\ProgramData\chocolatey
  • Chocolatey Bin: C:\ProgramData\chocolatey\bin

⚙️ Comandos Básicos

🔍 Buscar un paquete

Busca paquetes disponibles en el repositorio oficial de Chocolatey que coincidan con el nombre o parte del nombre indicado.

choco search <busqueda>
Ejemplo
choco search vscode

📥 Instalar un paquete

Instala el paquete especificado. El modificador -y acepta automáticamente los términos de licencia y omite las confirmaciones.

choco install <paquete>
Ejemplo
choco install vscode

🔁 Actualizar un paquete

Actualiza el paquete especificado a su versión más reciente disponible.

choco upgrade <paquete>
Ejemplo
choco upgrade vscode

🔁Actualizar todos los paquetes

choco upgrade all -y

❌ Desinstalar un paquete

Desinstala el paquete indicado del sistema. El parámetro -y evita que se solicite confirmación.

                            choco uninstall <paquete> -y
                        
Ejemplo
                            choco uninstall vscode -y
                        

📄 Ver información de un paquete

Muestra información detallada sobre un paquete, incluyendo su descripción, versión, autor y dependencias.

                            choco info <paquete>
                        
Ejemplo
                            choco info vscode
                        

📋 Listar todos los paquetes

                            choco list
                        

Muestra la lista de todos los paquetes instalados localmente en tu sistema mediante Chocolatey.

                           choco list -i 
                        

🛠️ Parametros Útiles


📘 AYUDA Y SOPORTE


Opción Descripción
-?, --help, -h Muestra el menú de ayuda del comando.
--online Abre la documentación del comando en el navegador. Solo funciona con --help.

Ejemplo:

                            choco install git --help
                        

🐞 DEPURACIÓN Y VERBOSIDAD


Opción Descripción
-d, --debug Muestra mensajes de depuración. Útil para ver lo que pasa internamente.
-v, --verbose Muestra mensajes más detallados. No recomendado para uso normal.
--trace Nivel aún más detallado que verbose. Muy técnico.
--nocolor Elimina el color de los mensajes en consola. Útil en logs.

✅ COMPORTAMIENTO AUTOMÁTICO


Opción Descripción
--acceptlicense Acepta automáticamente las licencias. (Futuro uso).
-y, --yes, --confirm Acepta todas las preguntas (instalación/desinstalación). Implica --accept-license.
-f, --force Fuerza la acción, incluso si hay advertencias. Usar con precaución.
--noop, --whatif Simula la acción sin ejecutarla realmente.

📊 SALIDA Y LOGS


Opción Descripción
-r, --limitoutput Muestra solo información esencial.
-y, --yes, --confirm Acepta todas las preguntas (instalación/desinstalación). Implica --accept-license.
--timeout=SEGUNDOS Cambia el tiempo máximo de espera por comando. 0 = sin límite.
--log-file=archivo.log Guarda los logs en un archivo adicional.

🌐 RED Y PROXY


Opción Descripción
--proxy=URL Usa un proxy específico para las descargas.
--proxy-user, --proxy-password Credenciales del proxy.
--proxy-bypass-list, --proxy-bypass-on-local Especifica excepciones para el proxy.

📦 PAQUETES


Opción Descripción
-s, --source=URL o nombre Fuente de donde instalar (repositorio).
--version=VERSIÓN Especifica versión del paquete a instalar/desinstalar.
-a, --allversions Desinstala todas las versiones del paquete.

🔧 ARGUMENTOS Y PARÁMETROS


Opción Descripción
--params, --parameters, --pkgparameters, --packageparameters, --package-parameters=VALUE Parámetros personalizados para pasar al paquete.
--argsglobal, --args-global, --installargsglobal, --install-args-global, --applyargstodependencies, --apply-args-to-dependencies, --apply-install-arguments-to-dependencies Aplica argumentos de instalación a los paquetes dependientes.
--paramsglobal, --params-global, --packageparametersglobal, --package-parameters-global, --applyparamstodependencies, --apply-params-to-dependencies, --apply-package-parameters-to-dependencies Aplica parámetros del paquete a los paquetes dependientes.
-o, --override, --overrideargs, --overridearguments, --override-arguments Usa únicamente los argumentos proporcionados, sin añadir otros.
--notsilent, --not-silent No desinstala en modo silencioso.

🧰 OTROS


Opción Descripción
-x, --forcedependencies, --force-dependencies, --removedependencies, --remove-dependencies Desinstala las dependencias junto con el paquete.
-n, --skippowershell, --skip-powershell, --skipscripts, --skip-scripts, --skip-automation-scripts No ejecuta los scripts PowerShell del paquete.
--ignorepackagecodes, --ignorepackageexitcodes, --ignore-package-codes, --ignore-package-exit-codes Ignora los códigos de salida de los scripts del paquete y usa 0 o 1 como salida global.
--usepackagecodes, --usepackageexitcodes, --use-package-codes, --use-package-exit-codes Usa los códigos de salida definidos por los scripts del paquete como salida global.
--autouninstaller, --use-autouninstaller Usa el desinstalador automático de Chocolatey.
--skipautouninstaller, --skip-autouninstaller Omite el uso del desinstalador automático.
--failonautouninstaller, --fail-on-autouninstaller Falla la desinstalación si el desinstalador automático tiene errores.
--ignoreautouninstallerfailure, --ignore-autouninstaller-failure No falla si el desinstalador automático encuentra errores.
--stoponfirstfailure, --stop-on-first-failure, --stop-on-first-package-failure Detiene la instalación/desinstalación si falla el primer paquete.
--exitwhenrebootdetected, --exit-when-reboot-detected Finaliza si se detecta que el sistema requiere reinicio.
--ignoredetectedreboot, --ignore-detected-reboot Ignora si se detecta que el sistema requiere reinicio.
--skiphooks, --skip-hooks No ejecuta scripts de gancho (hooks).
--fromprograms, --from-programs, --fromprogramsandfeatures, --from-programs-and-features Desinstala un programa usando su nombre en “Programas y características” (solo versión licenciada).
--use-self-service, --force-self-service Fuerza el uso de autoservicio si está habilitado (solo versiones empresariales).

📦 Creacion de paquete

Crear el archivo .nuspec


Un paquete de Chocolatey se basa en un archivo .nuspec, que define los metadatos del paquete.

Comando para generalo:

                            choco new nombre-del-paquete
                        

Esto creará una estructura básica de carpeta con:

                                mi-paquete/
                                ├── mi-paquete.nuspec      # Archivo de manifiesto
                                └── tools/
                                    ├── chocolateyInstall.ps1  # Script de instalación
                                    └── (opcional) chocolateyUninstall.ps1  # Script de desinstalación
                        

Editar el archivo .nuspec


Abra el archivo .nuspec y edite los metadatos del paquete.

Los metadatos principales son:

                            
                                
                                    nombre-del-paquete
                                    1.0.0
                                    Título descriptivo
                                    TuNombre
                                    Descripción detallada del paquete.
                                    https://sitio-del-proyecto
                                    palabras clave
                                    
                                    
                                    
                                
                            
                        

No incluir .exe, .msi, etc. en , solo el nombre lógico.

Campos obligatorios ( id, version, authors, description).

Configurar chocolateyInstall.ps1


Ubicado en tools\chocolateyInstall.ps1. Aquí es donde se debe aplicar lógica dinámica y práctica.

Ejemplo de instalación online:

                                $ErrorActionPreference = 'Stop' # si algo falla, detener el script

                                $packageName = $env:ChocolateyPackageName # nombre del paquete
                                $toolsDir    = Split-Path -Parent $MyInvocation.MyCommand.Definition # ruta de la carpeta tools

                                $packageArgs = @{
                                  packageName    = $packageName # nombre del paquete optenido de .nuspec
                                  fileType       = 'exe' # tipo de archivo ( exe, msi, etc.)
                                  url            = 'https://example.com/software_installer.exe' # URL del paquete
                                  url64bit       = 'https://example.com/software_installer_x64.exe' # URL del paquete 64 bits
                                  softwareName   = 'Mi Software*' # nombre del software
                                  silentArgs     = '/S' # argumentos de silencio
                                  validExitCodes = @(0, 3010) # códigos de salida validos
                                  checksum       = 'ABCDEF1234567890...' # checksum
                                  checksumType   = 'sha256' # tipo de checksum
                                  checksum64     = '1234567890ABCDEF...' # checksum
                                  checksumType64 = 'sha256' # tipo de checksum
                                }
                                
                                Install-ChocolateyPackage @packageArgs # Instala el paquete
                        

Ejemplo de instalación local:

                            $ErrorActionPreference = 'Stop'

                            $packageName = $env:ChocolateyPackageName
                            $toolsDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
                            $installerPath = Join-Path $toolsDir 'mi-app.exe'

                            $packageArgs = @{
                              packageName   = $packageName  # nombre del paquete
                              fileType      = 'exe'  # o 'msi' según el caso
                              file          = $installerPath
                              silentArgs    = '/S'  # o '/quiet' para msi
                              validExitCodes = @(0, 3010)
                            }

                            Install-ChocolateyInstallPackage @packageArgs
                        

📋 Tabla completa de parámetros Install-ChocolateyPackage


Parámetro Descripción Ejemplo práctico Notas ✅ Obligatorio
packageName Nombre del paquete (referencia lógica interna) $env:ChocolateyPackageName Dinámico: evita hardcodear ✅ Sí
fileType Tipo de archivo a instalar: exe, msi, zip, portable 'exe', 'msi', 'zip', 'portable' zip requiere extracción; portable necesita scripts personalizados ✅ Sí
url URL directa al instalador (32 bits o genérico) 'https://example.com/app32.exe' Si solo tienes una arquitectura, usa solo url ✅ Sí (si no hay url64bit)
url64bit URL directa para sistemas de 64 bits 'https://example.com/app64.exe' Opcional pero recomendable ❌ No
silentArgs Parámetros de instalación silenciosa '/S', '/VERYSILENT', '/qn' Requiere investigación por tipo de instalador ✅ Sí
validExitCodes Códigos de salida válidos tras instalar @(0), @(0, 3010) 3010 = requiere reinicio ❌ No (pero recomendable)
checksum Hash SHA del archivo de 32 bits o genérico 'D8B6E8714B8E135D3AF0D4C8A37B39C6B6D30AE28B40B1F01B23A17F72C5197A' Obligatorio para subir a Chocolatey.org ✅ Sí (si publicas en chocolatey.org)
checksumType Algoritmo del checksum (md5, sha1, sha256, sha512) 'sha256' sha256 es el estándar recomendado ✅ Sí (si defines checksum)
checksum64 Hash SHA del archivo de 64 bits '19C24B187C5BA942D77A2A07D23E431E51D8A17708F302BC9609A877DAD2F3B9' Solo necesario si defines url64bit ✅ Sí (si defines url64bit)
checksumType64 Algoritmo del checksum64 'sha256' Debe coincidir con checksum64 ✅ Sí (si defines checksum64)

✅ Obligatorio mínimo para un paquete funcional no público:

  • packageName
  • fileType
  • url
  • solidArgs

✅ Obligatorio para publicación en chocolatey.org:

  • Todos los anteriores
  • checksum
  • checksumType
  • (y si usas url64bit, también checksum64 y checksumType64)

Parametros ejemplo


A Continuación, se detalla algunos ejemplos de parámetros mostrado previamente:

🔐 ¿Cómo generar un checksum?

Un checksum (hash) es una firma digital única de un archivo. Chocolatey los usa para verificar que el archivo descargado no fue modificado ni corrompido.

                            Get-FileHash -Path "C:\ruta\al\archivo.exe" -Algorithm SHA256
                        

Salida:

                            Algorithm : SHA256
                            Hash      : 6A9F0D07A4BD3D129DB16D75F1C8A5A3D87A1CDBEF32C3DCA4C223EAA63B7709
                            Path      : C:\ruta\al\archivo.exe
                        
  • Usa solo el valor de Hash en tu script (checksum = '...')
  • Usa sha256 como valor para checksumType
💥 ¿Qué son los validExitCodes?

Son los códigos de salida que Chocolatey considerará como una instalación exitosa.

Código Significado Acción de Chocolatey
0 Instalación exitosa ✅ OK
3010 Instalación correcta, pero requiere reinicio ⚠️ Avisa, pero no falla
1, 1603, etc Error de instalación ❌ Error (a menos que lo permitas)
🔧 ¿Cómo definirlos?
                            validExitCodes = @(0, 3010)
                        

Si no incluyes 3010 y el instalador lo mostrará que falló aunque no sea así.

🤫 SilentArgs por tipo de instalador

Cada tipo de instalador usa parámetros distintos para instalación silenciosa (sin GUI ni interacción)

Tipo de instalador silentArgs típicos Notas
NSIS /S Mayúscula obligatoria
InnoSetup /VERYSILENT /SUPPRESSMSGBOXES Recomendado añadir /NORESTART
MSI /s A veces necesita un archivo setup.iss
SFX (WinRAR/7z) /s Limitado, depende de cómo se generó
EXE genérico Investigar con /?, /h, -?, --help Prueba manualmente en consola
🧪 Tip para detectar parámetros:
                            installer.exe /?
                        

O

                            Start-Process ".\archivo.exe" -ArgumentList '/?' -Wait
                        
🧠 ¿Cuándo usar url y url64bit?
Escenario ¿Qué usar? Ejemplo
Un solo instalador para todas las arquitecturas Instaladores diferentes para 32 y 64 bits
Solo url url y url64bit
'https://ejemplo.com/setup.exe' 'setup32.exe', 'setup64.exe'

Chocolatey instalará la versión adecuada según la arquitectura del sistema:

                            $url = 'https://ejemplo.com/setup32.exe'
                            $url64 = 'https://ejemplo.com/setup64.exe'
                        

Y debes incluir ambos checksum y checksum64.

🛠️ Cómo probar localmente tu paquete
                            choco pack
                            choco install nombredelpaquete -s .
                        

El parámetro -s . (source local) hace que use el .nupkg en el directorio actual.

Aprovisionamiento

Cual es la diferencias entre un paquete normal y uno de aprovisionamiento ?



La diferencia entre un paquete normal de Chocolatey y uno de aprovisionamiento está en su objetivo y alcance, no tanto en la estructura técnica (que es casi igual).


✅ Paquete normal

Es un paquete que instala una sola aplicación específica.

Ejemplo:

                                choco install vlc
                            

🧰 Paquete de aprovisionamiento

Es un paquete personalizado que instala y configura múltiples cosas a la vez: programas, configuraciones, scripts, accesos directos, etc.

Ejemplo:

                                choco install mi-paquete-de-aprovisionamiento --source .
                            

Esto puede:

  • Instalar varios programas (Chrome, VLC, 7-Zip…).
  • Ejecutar scripts de configuración o limpieza.
  • Crear accesos directos personalizados.
  • Aplicar configuraciones al sistema.
  • Instalar aplicaciones propias desde archivos locales.

📦 El paquete mi-aprovisionamiento:

  • Es creado por ti o tu equipo.
  • Usa un solo chocolateyInstall.ps1 con múltiples acciones.
  • Actúa como una “macro” de instalación y configuración.

Diferencias clave

Característica Paquete normal Paquete de aprovisionamiento
Propósito Instala una sola aplicación Instala y configura múltiples cosas a la vez
Instalación múltiple No Si
Contenido Binarios de una app Scripts, accesos directos, apps, etc
Fuente común Repositorio de Chocolatey Personal o interno
Ideal para... Usuarios finales Técnicos, IT, imágenes base
Customización Muy limitada Total (scripts PowerShell)

🧠 Piensa en el paquete de aprovisionamiento como:

  • Un script instalador empaquetado como .nupkg.
  • Un instalador todo-en-uno.
  • Un sustituto moderno de los .bat o .cmd que usabas para preparar PCs.

🧱 Crear la estructura del paquete

Abre PowerShell y ejecuta:

                                choco new aprovisionamiento-inicial
                                cd aprovisionamiento-inicial
                            

Esto crea una carpeta con esta estructura:

                                aprovisionamiento-inicial/
                                ├── aprovisionamiento-inicial.nuspec
                                └── tools/
                                    └── chocolateyInstall.ps1
                            

🛠️ Editar el archivo .nuspec

Abre aprovisionamiento-inicial.nuspec y ajusta:

                                
                                
                                  
                                    aprovisionamiento-inicial
                                    1.0.0
                                    Aprovisionamiento Inicial
                                    TuNombre
                                    TuNombre
                                    Instala aplicaciones comunes y ejecuta configuraciones.
                                    aprovisionamiento chocolatey automatizacion
                                  
                                
                            

🧾 Preparar el instalador local

Crea una carpeta dentro de tools llamada instaladores:

                                mkdir tools\instaladores
                            

Y pon ahí tu archivo MiApp.exe. Puedes usar un ejecutable de prueba o un dummy por ahora.

⚙️ Editar tools\chocolateyInstall.ps1

Reemplaza todo el contenido con lo siguiente:

                                $ErrorActionPreference = 'Stop'

                                # Instalar software desde Chocolatey
                                choco install googlechrome -y
                                choco install vlc -y
                                choco install notepadplusplus -y

                                # Ejecutar instalador local (instalación silenciosa)
                                $exePath = Join-Path $PSScriptRoot 'instaladores\MiApp.exe'
                                if (Test-Path $exePath) {
                                    Start-Process -FilePath $exePath -ArgumentList '/S' -Wait
                                } else {
                                    Write-Warning "Instalador local no encontrado: $exePath"
                                }

                                # Crear accesos directos
                                $shortcutDir = "$env:Public\Desktop\Aprovisionamiento"
                                New-Item -ItemType Directory -Path $shortcutDir -Force | Out-Null

                                $apps = @(
                                    @{ Name = "Google Chrome"; Path = "${env:ProgramFiles(x86)}\Google\Chrome\Application\chrome.exe" },
                                    @{ Name = "VLC"; Path = "${env:ProgramFiles}\VideoLAN\VLC\vlc.exe" },
                                    @{ Name = "Notepad++"; Path = "${env:ProgramFiles}\Notepad++\notepad++.exe" }
                                )

                                foreach ($app in $apps) {
                                    if (Test-Path $app.Path) {
                                        $WScriptShell = New-Object -ComObject WScript.Shell
                                        $shortcut = $WScriptShell.CreateShortcut("$shortcutDir\$($app.Name).lnk")
                                        $shortcut.TargetPath = $app.Path
                                        $shortcut.Save()
                                    }
                                }

                                # Configuración personalizada
                                Write-Host "Configuración personalizada completada."
                            

📦 Empaquetar el .nupkg

Desde la raíz del paquete:

choco pack

Esto creara un archivo aprovisionamiento-inicial.1.0.0.nupkg

🚀 Instalar el paquete

Desde el mismo directorio:

choco install aprovisionamiento-inicial --source . --yes

Chocolatey ejecutará las acciones definidas: instalación de apps, ejecución del EXE y creación de accesos directos.

📚 Instalar múltiples versiones del mismo paquete

Chocolatey normalmente instala una sola versión de un paquete a la vez. Sin embargo, con algunos ajustes es posible mantener varias versiones de un mismo software instaladas en paralelo. La mejor práctica es crear paquetes con identificadores de nombre distintos para cada versión (por ejemplo, mysql.workbench8 para la versión 8 y mysql.workbench6 para la 6). A continuación se detalla, paso a paso, cómo lograr esto manualmente usando únicamente Chocolatey y herramientas estándar (sin necesidad de editores de paquetes externos).

📥 Descarga de los paquetes .nupkg desde el portal de Chocolatey

El primer paso consiste en obtener los archivos de paquete ( .nupkg ) de las versiones deseadas de MySQL Workbench directamente desde el repositorio comunitario de Chocolatey. En la página del paquete MySQL Workbench en Chocolatey, existe una opción de Download para bajar el .nupkg de la versión seleccionada (normalmente en la barra lateral de la página del paquete). Chocolatey permite descargar el paquete completo desde el portal web para usos offline

Descargar paquetes .nupkg

Identificación y descarga de dependencias requeridas

Antes de proceder a instalar los paquetes localmente, es importante identificar las dependencias que cada versión de MySQL Workbench requiere. En la misma página de Chocolatey del paquete, busque la sección Dependencies (Dependencias). Para MySQL Workbench, típicamente aparece una dependencia a Microsoft Visual C++ Redistributable. Por ejemplo, versiones recientes de Workbench dependen de vcredist2015 (Visual C++ 2015-2019 Redistributable)

descargar dependencias

Si una dependencia como vcredist2015 no estuviera ya instalada en el sistema o si se desea realizar la instalación completamente offline, se debe descargar también el .nupkg de esa dependencia desde Chocolatey. Para ello, busque el paquete correspondiente (por ejemplo, vcredist2015 en Chocolatey) y utilice igualmente el botón Download en su página para obtener el archivo .nupkg de la versión adecuada. Guarde este archivo junto con los .nupkg de MySQL Workbench descargados anteriormente.

descargar dependencias offline

Extracción del paquete .nupkg original

Una vez obtenidos los archivos .nupkg de MySQL Workbench (y sus dependencias), el siguiente paso es preparar el paquete para permitir instalaciones lado a lado. Un archivo .nupkg es esencialmente un archivo ZIP que contiene los metadatos y scripts de Chocolatey para el software. No se requiere ninguna herramienta externa especial para manipularlo: puede renombrarse la extensión a .zip y extraerse con el Explorador de Windows o utilizar una herramienta de descompresión común.


paquetes paquetes

Utilice su método preferido para extraer el contenido de cada .nupkg de MySQL Workbench en carpetas separadas (por ejemplo, en una carpeta mysql.workbench6 para la versión 6.x y otra mysql.workbench8 para la 8.x). Dentro de cada carpeta encontrará varios archivos, entre ellos el archivo .nuspec que contiene la información del paquete (nombre, versión, dependencias, etc.) y una carpeta tools con los scripts de instalación (por ejemplo, chocolateyInstall.ps1 ). A continuación, localizaremos el archivo .nuspec para editarlo.

paquetes

Modificación del archivo .nuspec (cambio de ID del paquete)

El paso clave para permitir múltiples instalaciones es modificar el identificador de paquete (ID) en el archivo .nuspec . Abra el archivo .nuspec extraído (por ejemplo, mysql.workbench.nuspec ) con un editor de texto plano. Busque la etiqueta XML <id> dentro del .nuspec . Esta etiqueta define el nombre del paquete tal como Chocolatey lo registra. Por defecto, para MySQL Workbench será algo como <id>mysql.workbench</id>.

Reemplace el contenido de <id> por un nuevo identificador único que represente la versión específica. Por ejemplo, si está preparando el paquete para MySQL Workbench 8.0.x, podría usar <id>mysql.workbench8</id> (o mysql.workbench8.0 según prefiera nomenclatura). Para la versión 6.3.x, podría usar <id>mysql.workbench6</id>. Este cambio de nombre asegura que Chocolatey tratará a cada versión como un paquete distinto, evitando conflictos de nombre. Es recomendable también ajustar la etiqueta <title> para que refleje la versión (por ejemplo, "MySQL Workbench 8.0.22") y así poder distinguir las instalaciones en interfaces gráficas, aunque esto es opcional y principalmente informativo. No modifique la etiqueta <version> : déjela con el número de versión original del software (ya que corresponde a la versión del software que estamos empaquetando, no de Chocolatey en sí). Guarde los cambios en el .nuspec .

PAQUETES

Nota: No es necesario alterar otros campos del .nuspec más allá del id (y el title si se desea). Las dependencias listadas (como vcredist2015 ) pueden permanecer igual, ya que seguiremos satisfaciéndolas con el mismo nombre de paquete de dependencia. Tampoco es necesario modificar los scripts de instalación en la carpeta tools en este caso, ya que seguimos instalando el mismo software; solo estamos renombrando el contenedor del paquete en Chocolatey.

Reempaquetado del paquete modificado con Chocolatey

Después de haber editado el .nuspec con el nuevo ID, procedemos a reempaquetar el contenido en un nuevo archivo .nupkg . Chocolatey proporciona la herramienta de línea de comandos choco pack para este propósito. Asegúrese de estar ubicado en la carpeta donde extrajo el paquete y editó el .nuspec (es decir, donde reside el archivo .nuspec ). Desde una ventana de PowerShell o símbolo del sistema con privilegios de administrador, ejecute:

                choco pack
            

Esto leerá el archivo .nuspec y generará un nuevo .nupkg con el nombre e id que especificamos. Por ejemplo, tras modificar mysql.workbench.nuspec a id "mysql.workbench8", al ejecutar choco pack se creará un archivo como mysql.workbench8..nupkg (donde corresponderá a la versión de MySQL Workbench, p. ej. 8.0.22). Chocolatey mostrará un mensaje indicando que el paquete se empaquetó exitosamente.


Repita este proceso de empaquetado para cada versión que haya extraído y modificado. Al final, deberá contar con uno o más archivos .nupkg nuevos (recompilados) para MySQL Workbench, cada uno con un identificador único (por ejemplo, mysql.workbench6.*.nupkg y mysql.workbench8.*.nupkg ), además del .nupkg de la dependencia vcredist2015 (si es que no está ya instalada en el sistema).

Instalación de los paquetes desde la carpeta local con Chocolatey

Una vez preparados los paquetes .nupkg modificados, podemos instalarlos usando Chocolatey apuntando a la ubicación local donde se encuentran. Reúna todos los archivos .nupkg (los de MySQL Workbench renombrados y el de cualquier dependencia descargada, como vcredist2015 ) en una misma carpeta para mayor facilidad. Por ejemplo, podría tener una carpeta C: \Repositorios\ChocolateyLocal con:

  • mysql.workbench6.3.10.nupkg (paquete recompilado de Workbench 6.3.10, ID modificado a mysql.workbench6)
  • mysql.workbench8.0.22.nupkg (paquete recompilado de Workbench 8.0.22, ID modificado a mysql.workbench8)
  • vcredist2015.14.0.xx.nupkg (paquete de dependencia VC++ 2015, tal como se descargó)

Para instalar desde esta ubicación, abra una consola de administrador en esa carpeta y ejecute choco install especificando el nombre del nuevo paquete y usando -s . para indicar que la fuente es el directorio actual (en vez de buscar en internet):

    choco install mysql.workbench8 --source=. -y

El parámetro -y auto-confirma la instalación. Chocolatey localizará el paquete mysql.workbench8 en la carpeta (gracias a --source=. ) y empezará la instalación. Si el paquete tiene dependencias declaradas (por ejemplo vcredist2015 ), Chocolatey buscará también ese paquete en la fuente local. Asegúrese por tanto de que el .nupkg de cada dependencia requerida esté presente en la misma carpeta o que dicha dependencia ya esté instalada en el sistema.


Repita el comando de instalación para cada paquete de MySQL Workbench de versión distinta que haya preparado (por ejemplo, también choco install mysql.workbench6 --source=. -y para la versión 6.3.x). Cada uno se instalará como un paquete independiente en el sistema.

Verificación de múltiples versiones instaladas simultáneamente

Terminada la instalación, es importante verificar que las múltiples versiones de MySQL Workbench coexisten correctamente. Gracias a que cambiamos los identificadores de paquete, Chocolatey las registró como paquetes distintos, por lo que no entran en conflicto ni se reemplazan mutuamente. Podemos listar los paquetes instalados localmente para confirmar:

choco list --local-only mysql.workbench*

El resultado debe mostrar ambos paquetes, por ejemplo mysql.workbench6 6.3.10 y mysql.workbench8 8.0.22 (cada uno con su versión correspondiente), indicando que las dos versiones están instaladas lado a lado.


Adicionalmente, puede comprobar en el sistema operativo que ambas versiones de MySQL Workbench están disponibles. Por ejemplo, en el menú Inicio o en Agregar o quitar programas (Panel de control), deberían aparecer dos entradas separadas para MySQL Workbench, identificadas por su número de versión. Cada versión instalada funcionará de manera independiente, permitiendo lanzar una u otra según la necesidad.