Guía maestra: instalador .exe para Windows que abre una URL

Objetivo: crear, 100% en la nube (desde Linux), un instalador para Windows llamado Cursoslaborales-Setup.exe que al instalarse solo cree accesos directos que abren https://www.cursoslaborales.cl/alumno en el navegador predeterminado.

Resumen
Índice 1. Prerrequisitos 2. Crear el repositorio 3. Agregar los dos archivos clave 4. Ejecutar el build en GitHub Actions 5. Descargar el instalador 6. Instalar y probar en Windows 7. Personalización opcional 8. Mantenimiento y actualizaciones 9. Solución de problemas 10. FAQ corta

1) Prerrequisitos

  1. Una cuenta en GitHub.
  2. Navegador web (desde tu Linux). No necesitas instalar nada localmente.

2) Crear el repositorio en GitHub

  1. Entra a github.com/new.
  2. Nombre del repositorio: cursoslaborales-installer (o el que quieras).
  3. Visibilidad: Private o Public (como prefieras).
  4. Haz clic en Create repository.

3) Agregar los dos archivos clave

3.1 Archivo NSIS del instalador

Crea un archivo llamado installer.nsi en la raíz del repo y pega este contenido (ya viene con tu nombre y URL):

!define APPNAME "Cursoslaborales"
!define URL "https://www.cursoslaborales.cl/alumno"

Name "${APPNAME}"
OutFile "${APPNAME}-Setup.exe"
InstallDir "$LOCALAPPDATA\${APPNAME}"
RequestExecutionLevel user
ShowInstDetails nevershow
ShowUnInstDetails nevershow

Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles

Section "Install"
  SetOutPath "$INSTDIR"

  ; Crear acceso directo (.url) en Menú Inicio
  CreateDirectory "$SMPROGRAMS\${APPNAME}"
  FileOpen $0 "$SMPROGRAMS\${APPNAME}\${APPNAME}.url" w
  FileWrite $0 "[InternetShortcut]$\r$\nURL=${URL}$\r$\nIconFile=%SystemRoot%\system32\url.dll$\r$\nIconIndex=0"
  FileClose $0

  ; Crear acceso directo (.url) en Escritorio
  FileOpen $1 "$DESKTOP\${APPNAME}.url" w
  FileWrite $1 "[InternetShortcut]$\r$\nURL=${URL}$\r$\nIconFile=%SystemRoot%\system32\url.dll$\r$\nIconIndex=0"
  FileClose $1

  ; Desinstalador y registro (por usuario, sin admin)
  WriteUninstaller "$INSTDIR\Uninstall.exe"
  WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}"
  WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$INSTDIR\Uninstall.exe"
SectionEnd

Section "Uninstall"
  Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.url"
  RMDir  "$SMPROGRAMS\${APPNAME}"
  Delete "$DESKTOP\${APPNAME}.url"
  Delete "$INSTDIR\Uninstall.exe"
  RMDir  "$INSTDIR"
  DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"
SectionEnd

Este instalador no requiere privilegios de administrador (instala para el usuario actual).

3.2 Workflow de GitHub Actions (compilación en la nube)

Crea el archivo .github/workflows/build-nsis.yml y pega:

name: Build NSIS URL Installer
on: [workflow_dispatch]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Instalar NSIS
        run: |
          sudo apt-get update
          sudo apt-get install -y nsis

      - name: Compilar instalador
        run: makensis installer.nsi

      - name: Subir artefacto
        uses: actions/upload-artifact@v4
        with:
          name: Cursoslaborales-installer
          path: "*.exe"
¿Qué hará esto?
  • Usará un servidor Ubuntu en la nube.
  • Instalará NSIS, compilará installer.nsi y generará Cursoslaborales-Setup.exe.
  • Subirá el artifact para descargarlo desde la interfaz de GitHub.

4) Ejecutar el build en GitHub Actions

  1. Ve a la pestaña Actions del repositorio.
  2. En el workflow “Build NSIS URL Installer”, haz clic en Run workflow.
  3. Espera a que aparezca el punto verde ✅ en el job build.

La primera vez, GitHub puede pedirte habilitar Actions. Acepta.

5) Descargar el instalador

  1. Dentro del run completado, en la parte inferior verás Artifacts.
  2. Descarga Cursoslaborales-installer → obtendrás el archivo Cursoslaborales-Setup.exe.

6) Instalar y probar en Windows

  1. Copia Cursoslaborales-Setup.exe a un PC con Windows.
  2. Ábrelo y sigue el asistente (elige la carpeta sugerida).
  3. Al terminar:
    • En el Escritorio verás Cursoslaborales.url.
    • En Menú Inicio → Cursoslaborales → acceso directo.
    • Al hacer doble clic, se abrirá https://www.cursoslaborales.cl/alumno en el navegador predeterminado.
  4. Desinstalación: Panel de Control → Agregar o quitar programas → CursoslaboralesDesinstalar.

Nota SmartScreen: Windows puede mostrar advertencia de “editor desconocido”. Es normal si no firmas el instalador. Puedes continuar con “Más información → Ejecutar de todas formas”.

7) Personalización opcional

Ícono propio para los accesos directos

  1. Agrega un archivo icon.ico a la raíz del repo.
  2. Cambia las líneas IconFile=%SystemRoot%\system32\url.dll por IconFile=$INSTDIR\icon.ico.
  3. Debajo de SetOutPath "$INSTDIR" agrega:
      File "icon.ico"
  4. Vuelve a ejecutar el workflow para reconstruir.

Nombre del instalador

Modifica OutFile en installer.nsi si deseas otro nombre.

Sin instalador, solo un .exe que abre la URL (alternativa)

Si prefieres un ejecutable simple, puedes crear un binario con Go (cross-compile en Linux) y subirlo como artifact. Esto no crea accesos directos ni entrada de desinstalación.

// main.go
package main
import "os/exec"
func main() {
  url := "https://www.cursoslaborales.cl/alumno"
  exec.Command("cmd","/c","start","","",url).Start()
}
# .github/workflows/build-go.yml
name: Build Windows EXE (Go)
on: [workflow_dispatch]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with: { go-version: "1.22" }
      - run: GOOS=windows GOARCH=amd64 go build -ldflags="-H=windowsgui" -o cursoslaborales.exe .
      - uses: actions/upload-artifact@v4
        with:
          name: Cursoslaborales-exe
          path: cursoslaborales.exe

8) Mantenimiento y actualizaciones

9) Solución de problemas

  • El workflow falla instalando NSIS: asegúrate de tener ubuntu-latest y que el paso corre sudo apt-get update antes de instalar.
  • No aparece el artifact: confirma que el patrón path: "*.exe" coincide con el archivo generado (nombre en OutFile).
  • Windows alerta SmartScreen: es normal sin firma. Usa “Más información” → “Ejecutar de todas formas” o firma el instalador.
  • No quiero pedir admin: ya usamos RequestExecutionLevel user y escribimos en HKCU (por usuario), por lo que no requiere privilegios de administrador.
  • Quiero que el instalador abra la URL al finalizar: añade al final de la Section "Install":
      ExecShell "open" "${URL}"

10) FAQ corta

¿Necesito Windows para crear el instalador? No. Todo se compila en Ubuntu (GitHub Actions).

¿Qué instala realmente? Solo accesos directos que abren tu URL y un desinstalador.

¿Se puede cambiar el nombre/icono? Sí, en el script NSIS (ver sección 7).