3.1.1: la versión que enseña Windows no depende de los accesos directos

Al actualizar a la 3.1.0 la instalación de Munka por su propio botón,
Configuración › Aplicaciones siguió diciendo 3.0.0. Tras actualizarse se
reescribían los dos accesos directos (uno vive en el Escritorio de OneDrive)
antes de apuntar la versión, y si uno no se dejaba reescribir, la versión no
se apuntaba. instalar.al_dia ya no toca un acceso que abre lo que debe, uno
que no se deja no impide lo demás, y la versión se apunta siempre. Con prueba.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Este commit está contenido en:
Labstream
2026-10-04 12:37:25 -05:00
padre 50562aeaab
commit acb945c2ef
Se han modificado 5 ficheros con 64 adiciones y 29 borrados

Ver fichero

@@ -274,23 +274,24 @@ def instalado_aqui(base):
return bool(i) and os.path.normcase(os.path.normpath(i["base"])) == os.path.normcase(os.path.normpath(base))
def instalar(base, version, solo_los_que_hay=False):
"""Da de alta el programa de `base`. Con `solo_los_que_hay` no repone un acceso directo que alguien
quitó a propósito: solo pone al día los que siguen ahí (es lo que se hace tras cada actualización)."""
def _apuntar(base, version):
"""La línea del programa en Configuración › Aplicaciones."""
exe, args = orden(base)
icono = os.path.join(base, "static", "organilab.ico")
hechos = []
for ruta in _accesos():
if solo_los_que_hay and not os.path.exists(ruta):
continue
hechos.append(acceso_directo(ruta, exe, args, base, icono))
with winreg.CreateKey(winreg.HKEY_CURRENT_USER, CLAVE) as k:
for nombre, valor in (("DisplayName", NOMBRE), ("DisplayVersion", version), ("Publisher", "Labstream"),
("DisplayIcon", icono), ("InstallLocation", base),
("DisplayIcon", os.path.join(base, "static", "organilab.ico")), ("InstallLocation", base),
("UninstallString", f'"{exe}" {args} desinstalar'.replace(" ", " "))):
winreg.SetValueEx(k, nombre, 0, winreg.REG_SZ, valor)
for nombre, valor in (("NoModify", 1), ("NoRepair", 1), ("EstimatedSize", _peso_kb(base))):
winreg.SetValueEx(k, nombre, 0, winreg.REG_DWORD, valor)
def instalar(base, version):
"""Da de alta el programa de `base`: sus dos accesos directos y su línea en Aplicaciones."""
exe, args = orden(base)
icono = os.path.join(base, "static", "organilab.ico")
hechos = [acceso_directo(ruta, exe, args, base, icono) for ruta in _accesos()]
_apuntar(base, version)
return {"base": base, "accesos": hechos, "orden": f'"{exe}" {args}'.strip()}
@@ -307,17 +308,27 @@ def poner(base, version, avance=None):
def al_dia(base, version):
"""Tras una actualización: si este programa está dado de alta, Windows tiene que enseñar la versión
nueva y los accesos directos tienen que apuntar a lo que ahora lo abre."""
"""Tras una actualización: si este programa está dado de alta, Windows tiene que enseñar la versión nueva
y los accesos directos tienen que apuntar a lo que ahora lo abre. Devuelve True si hubo que cambiar algo."""
i = instalado()
if not i or not instalado_aqui(base):
return False
exe, args = orden(base)
viejos = [a for a in map(leer_acceso, (r for r in _accesos() if os.path.exists(r))) if a]
if i["version"] == version and all(os.path.normcase(a["exe"]) == os.path.normcase(exe) and a["args"] == args for a in viejos):
return False
instalar(base, version, solo_los_que_hay=True)
return True
cambio = i["version"] != version
for ruta in _accesos():
if not os.path.exists(ruta):
continue # el que alguien quitó a propósito no se repone
try:
a = leer_acceso(ruta)
if a and _misma(a["exe"], exe) and a["args"] == args:
continue # ya abre lo que tiene que abrir: no se toca
acceso_directo(ruta, exe, args, base, os.path.join(base, "static", "organilab.ico"))
cambio = True
except OSError:
pass # un acceso que ahora no se deja reescribir no impide lo demás
if cambio:
_apuntar(base, version)
return cambio
def desinstalar(base=None):