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:
45
instalar.py
45
instalar.py
@@ -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):
|
||||
|
||||
Referencia en una nueva incidencia
Block a user