Files
fn_registry/functions/infra/set_exe_icon.md
T
egutierrez 5bbe45ca30 feat(infra): set_exe_icon — embed icono .ico en .exe Windows post-build
Implementacion Go pura sin dependencias externas (sin rcedit, wine, ni rsrc).
Parsea ICONDIR + ICONDIRENTRY del .ico, construye un IMAGE_RESOURCE_DIRECTORY
tree con RT_ICON + RT_GROUP_ICON, y appendea una nueva seccion .rsrc al PE.
Soporta PE32 y PE32+. No soporta exe que ya tienen recursos (retorna error).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:41:56 +02:00

45 lines
1.9 KiB
Markdown

---
name: set_exe_icon
kind: function
lang: go
domain: infra
version: "1.0.0"
purity: impure
signature: "func SetExeIcon(exePath, icoPath string) error"
description: "Embebe un icono (.ico multi-tamaño) en un ejecutable PE Windows post-build. Implementacion Go pura sin dependencias externas (sin rcedit/wine/rsrc). Parsea el ICONDIR + ICONDIRENTRY del .ico, construye un IMAGE_RESOURCE_DIRECTORY tree con RT_ICON + RT_GROUP_ICON, y appendea una nueva seccion .rsrc al PE. Soporta PE32 y PE32+. No soporta exe que ya tienen recursos (retorna error)."
tags: [windows, pe, exe, icon, rcedit, post-build]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [bytes, encoding/binary, fmt, os]
params:
- name: exePath
desc: "ruta absoluta o relativa al .exe Windows a modificar (se sobreescribe in-place)"
- name: icoPath
desc: "ruta al archivo .ico con uno o mas tamaños de icono"
output: "nil si el icono se embebio correctamente; error si el .exe ya tiene recursos, no es PE valido, o el .ico es invalido"
tested: false
tests: []
test_file_path: ""
file_path: "functions/infra/set_exe_icon.go"
---
## Ejemplo
```go
err := infra.SetExeIcon("myapp.exe", "logo.ico")
if err != nil {
log.Fatal(err)
}
```
## Notas
- Solo Go binaries cross-compiled a Windows que **no** tengan seccion `.rsrc` previa. La mayoria de binarios Go limpios no la tienen.
- Si el .exe ya tiene recursos (creado con `goversioninfo`, `rsrc`, MSVC, etc.), retorna error y no modifica el archivo.
- El checksum del PE se pone a 0 tras la modificacion (Windows lo ignora para .exe normales; firmas Authenticode quedarian invalidadas).
- Soporta multi-resolucion: si el .ico tiene 16x16, 32x32, 256x256... todos se embeben y Windows elige el mejor.
- El icono cambia tras refrescar la cache de iconos de Explorer (a veces requiere `ie4uinit -show` o reiniciar Explorer).