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.
- No necesitas Windows: todo se construye en GitHub Actions (Ubuntu).
- Usamos NSIS para generar un instalador súper liviano (sin runtimes).
- Resultado: un
.exe
que instala accesos directos (Inicio y Escritorio) y un desinstalador.
1) Prerrequisitos
- Una cuenta en GitHub.
- Navegador web (desde tu Linux). No necesitas instalar nada localmente.
2) Crear el repositorio en GitHub
- Entra a github.com/new.
- Nombre del repositorio: cursoslaborales-installer (o el que quieras).
- Visibilidad: Private o Public (como prefieras).
- 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"
- 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
- Ve a la pestaña Actions del repositorio.
- En el workflow “Build NSIS URL Installer”, haz clic en Run workflow.
- Espera a que aparezca el punto verde ✅ en el job build.
La primera vez, GitHub puede pedirte habilitar Actions. Acepta.
5) Descargar el instalador
- Dentro del run completado, en la parte inferior verás Artifacts.
- Descarga Cursoslaborales-installer → obtendrás el archivo
Cursoslaborales-Setup.exe
.
6) Instalar y probar en Windows
- Copia
Cursoslaborales-Setup.exe
a un PC con Windows. - Ábrelo y sigue el asistente (elige la carpeta sugerida).
- 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.
- Desinstalación: Panel de Control → Agregar o quitar programas → Cursoslaborales → Desinstalar.
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
- Agrega un archivo
icon.ico
a la raíz del repo. - Cambia las líneas
IconFile=%SystemRoot%\system32\url.dll
porIconFile=$INSTDIR\icon.ico
. - Debajo de
SetOutPath "$INSTDIR"
agrega:File "icon.ico"
- 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
- Para cambiar la URL en el futuro, edita
installer.nsi
y vuelve a ejecutar el workflow. - Puedes publicar el
.exe
en Releases del repositorio para distribución fácil. - Si deseas firma de código (opcional, recomendado para producción), necesitarás un certificado de editor y un paso adicional en Windows o en CI con herramientas de firmado.
9) Solución de problemas
- El workflow falla instalando NSIS: asegúrate de tener
ubuntu-latest
y que el paso corresudo apt-get update
antes de instalar. - No aparece el artifact: confirma que el patrón
path: "*.exe"
coincide con el archivo generado (nombre enOutFile
). - 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 enHKCU
(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).