Página 1 de 1

[RESUELTO] Paquete Screenpresso

Publicado: 6 de julio de 2021 - 10:49 a. m.
por elelay
Buen día,

Estoy intentando desarrollar un paquete para el software Screenpresso. ¡Gracias a la versión 2.0, es mucho más sencillo! Y aun así...

La instalación se realizó sin problemas y nunca tuve ningún problema.
Sin embargo, para la desinstalación, si entiendo correctamente, es wapt el que se encarga de generar la función uninstall() a partir de la clave de desinstalación.
El recuperado es el correcto y probar el paquete localmente en la consola lo hace funcionar.
Sin embargo, se devuelve un error después de la ejecución y, por lo tanto, el paquete falla.

Ejecución en VSCode:

Código: Seleccionar todo

Removing D:\waptdev\sdis85-screenpresso-wapt ...

L'opération a réussi.
2021-07-06 10:29:05,991 CRITICAL Critical error during uninstall: CalledProcessErrorOutput: Command '"C:\\Program Files\\Learnpulse\\Screenpresso\\Screenpresso.exe" deploy --programfiles --quiet --uninstall' returned non-zero exit status 11.
Output:
No package removed !
=== Error removing packages ===
Instalación mediante la consola:

Código: Seleccionar todo

Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\waptservice\service.py", line 1961, in run
    self.running_task.run()
  File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", line 649, in run
    self._run()
  File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", line 1214, in _run
    self.result = self.wapt.remove(self.packagenames,
  File "C:\Program Files (x86)\wapt\common.py", line 5324, in remove
    print((self.run(uninstall_cmd)))
  File "C:\Program Files (x86)\wapt\common.py", line 3705, in run
    return ensure_unicode(setuphelpers.run(*arg, **args))
  File "C:\Program Files (x86)\wapt\setuphelpers_windows.py", line 4029, in run
    raise CalledProcessErrorOutput(proc.returncode, cmd, ''.join(output))
waptutils.CalledProcessErrorOutput: Command '"C:\\Program Files\\Learnpulse\\Screenpresso\\Screenpresso.exe" deploy --programfiles --quiet --uninstall' returned non-zero exit status 4294967295.

¿No sería posible evitar esto? Código de error 11 ¿Durante la desinstalación? Como la desinstalación en sí va muy bien, solo falla el paquete.

GRACIAS.

Paquete Screenpresso

Publicado: 7 de julio de 2021 - 9:14 a. m.
por elelay
Me equivoqué, el comando de desinstalación no es silencioso. Aparece una ventana emergente, de ahí el error.
Debes añadir `--quiet`.

Re: [RESUELTO] Paquete Screenpresso

Publicado: 7 de julio de 2021 - 10:25 a. m.
por dcardon
¡Gracias por tus comentarios, elelay!

Re: [RESUELTO] Paquete Screenpresso

Publicado: 8 de julio de 2021 - 23:06
por elelay
Hola de nuevo,

Para su información, el registro efectivamente devuelve --quiet y el error mencionado anteriormente sigue siendo relevante.
Para contrarrestar este problema, utilicé un archivo MSI.

Para aquellos que estén interesados, aquí está el código final con la función de actualización (update_package).

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *
from pkg_resources import parse_version
from bs4 import BeautifulSoup

# declaring global variables - warnings: 1) wapt context is only available in package functions; 2) global variables are not persistent between calls
uninstallkey = '{517a11fb-eba6-4afe-b7a1-96a0c8b51e01}'


def install():
    # declaring local variables

    ScreenpressoPath = f'{programfiles64}\\Learnpulse\\Screenpresso'
    package_version = control.get_software_version()

    # installing the package
    print("Installing Screenpresso...")
    install_msi_if_needed('ScreenpressoSetup.msi', min_version=package_version)
    create_desktop_shortcut(r'Screenpresso', f'{ScreenpressoPath}\\Screenpresso.exe')
    print("Added a desktop icon")

def uninstall():
    print("Uninstalling Screenpresso...")
    
    # Get the uninstall key from registry (returned as an array)
    uninstall_exec = ' '.join([values for values in uninstall_cmd(uninstallkey)])
    run(uninstall_exec)
    remove_desktop_shortcut(r'Screenpresso')
    print("Removed desktop shortcut")


def update_package():
    package_version = control.get_software_version()
    filenamex64 = "ScreenpressoSetup.msi"
    proxies = {}
    if isfile(makepath(application_data(), 'waptconsole', 'waptconsole.ini')):
        proxywapt = inifile_readstring(makepath(user_local_appdata(), 'waptconsole', 'waptconsole.ini'), 'global', 'http_proxy')
        if proxywapt:
            proxies = {'http': proxywapt, 'https': proxywapt}

    # Url to scrape to get the different versions
    url = "https://www.screenpresso.com/fr/versions/"
    url64 = "https://www.screenpresso.com/binaries/releases/stable/dotnet47/ScreenpressoSetup.msi"

    html_code = wgets(url)
    soup = BeautifulSoup(html_code, features='html.parser')
    versions = []
    
    # Gathering all Screenpresso versions
    for a in soup.find_all('a', {'class': 'header'}):
        versions.append(a.get_text().split(' ')[1].strip())

    # During the request,' Screenpresso' is returned two times so the latest version is the 3rd element of the array: ['Screenpresso', 'Screenpresso', '1.10.1', '...']
    latest_version = versions[2]

    if parse_version(package_version) < parse_version(latest_version):
        print(f'Found a more recent versions {latest_version} > {package_version}')

        # Delete old binary
        print('Delete ' + filenamex64)
        remove_file(filenamex64)
    
    else:
    	print('You have the latest version :)')
    
    # Download new binary
    if not isfile(filenamex64):
        print('Download ' + url64)
        wget(url64, filenamex64, proxies=proxies)

    # Modifying version in control file
    from waptpackage import PackageEntry
    pe = PackageEntry()
    pe.load_control_from_wapt(os.getcwd())
    pe.version = latest_version + '-0'
    pe.save_control_to_wapt(os.getcwd())


if __name__ == '__main__':
    update_package()
No dudes en enviarme tus comentarios.

Atentamente,

Esteban.