Página 1 de 2

|PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 17 de noviembre de 2023 - 16:21
por Vincent38
Buen día

Le ofrezco el(los) paquete(s) para instalar el conector de Outlook (v9.0.0.1937) para ZIMBRA en x64 y x86 (dependiendo de su versión de Office/Outlook).

Hay un problema con el archivo .msi, la clave "uninstallkey" declarada es incorrecta y no coincide con la realmente registrada en el registro, por lo que es necesario corregirla, de ahí la modificación en setup.py.


Para recuperar los archivos .msi (x64 y x86):
https://www.zimbra.com/product/addons/z...-download/


setup.py para x64:

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *

r"""
Usable WAPT package functions: install(), uninstall(), session_setup(), audit(), update_package()

"""
# Declaring global variables - Warnings: 1) WAPT context is only available in package functions; 2) Global variables are not persistent between calls

uninstallkey = ["{E84234CB-FF68-4270-A7EE-422FA03B4E0E}"]

def install():
    # Declaring local variables

    # Installing the software
    print("Installing: ZimbraConnectorOLK_9.0.0.1937_x64.msi")
    install_msi_if_needed('ZimbraConnectorOLK_9.0.0.1937_x64.msi',key='{E84234CB-FF68-4270-A7EE-422FA03B4E0E}')

setup.py para x86:

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *

r"""
Usable WAPT package functions: install(), uninstall(), session_setup(), audit(), update_package()

"""
# Declaring global variables - Warnings: 1) WAPT context is only available in package functions; 2) Global variables are not persistent between calls

uninstallkey = ["{C0A5C7CF-452B-4551-A9D5-CE41BC7831AF}"]

def install():
    # Declaring local variables

    # Installing the software
    print("Installing: ZimbraConnectorOLK_9.0.0.1937_x86.msi")
    install_msi_if_needed('ZimbraConnectorOLK_9.0.0.1937_x86.msi',key='{C0A5C7CF-452B-4551-A9D5-CE41BC7831AF}')
    

A mí me funciona, pero no estoy seguro de tener que ingresar la clave de desinstalación dos veces :D
Comandante

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 10 de enero de 2024 - 16:10
por Vincent38
¡Hola!

Actualización para la versión v9.0.0.1941: la clave de desinstalación debe modificarse en el archivo setup.py:

para x64: {89D59DBA-173A-4D13-8AB9-606F132F70FE}

para x86: {7B50AD56-1BE7-4006-97E2-B6969930BB5F}

Saludos

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 12 de enero de 2024 - 10:36 a. m.
por jpele
Hola,
he creado el paquete "a ciegas", ya que actualmente no disponemos de una forma sencilla de probar este software. ¿Podrías probarlo y confirmar que funciona correctamente? Puedes descargarlo aquí:
https://wapt.tranquil.it/wapt-testing/t ... EPROD.wapt

Sin tu confirmación, el paquete no se publicará automáticamente en la tienda.

Atentamente,
Jimmy

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 12 de enero de 2024 - 12:02 p. m.
por Vincent38
Buen día
Como esperaba, no funciona, ya que, como indico en mi post, la clave de instalación especificada en el msi por zimbra no corresponde a la realmente utilizada.
Entonces se queda atascado en la etapa de verificación de clave:

Código: Seleccionar todo

C:\Users\vmorey\Desktop>wapt-get install domoprod-zimbra-connector-outlook
Using config file: C:\Program Files (x86)\wapt\wapt-get.ini
installing WAPT packages domoprod-zimbra-connector-outlook
https://wapt1.addomo.domosolaris.com/wapt/domoprod-zimbra-connector-outlook_9.0.0.1941-2_x64_windows_PROD.wapt : 23071462 / 23071462 (100%) (79638 KB/s)
Installing domoprod-zimbra-connector-outlook(=9.0.0.1941-2)
Installing: ZimbraConnectorOLK_9.0.0.1941_x64.msi (9.0.0.1941)
Waiting for key: {E832D508-4385-452B-93CF-18D28BA6270B} to appear in Windows registry
El resto del mensaje después de presionar Ctrl+C:

Código: Seleccionar todo

2024-01-12 12:06:11,693 CRITICAL Fatal error in install script: AttributeError: 'EWaptSetupException' object has no attribute 'returncode':
Traceback (most recent call last):
  File "C:\Users\vmorey\AppData\Local\Temp\waptmgpv8_ev\setup.py", line 9, in install
    install_msi_if_needed(
  File "C:\Program Files (x86)\wapt\common.py", line 4033, in new_func
    return func(*args, **kwargs)
  File "C:\Program Files (x86)\wapt\setuphelpers_windows.py", line 1416, in install_msi_if_needed
    error('MSI %s has been installed but the %s can not be found' % (msi,searchparam))
  File "C:\Program Files (x86)\wapt\waptutils.py", line 1892, in error
    raise EWaptSetupException('Fatal error : %s' % reason)
waptutils.EWaptSetupException: Fatal error : MSI ZimbraConnectorOLK_9.0.0.1941_x64.msi has been installed but the key {E832D508-4385-452B-93CF-18D28BA6270B} can not be found

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\common.py", line 4083, in install_wapt
    exitstatus = setup.install()
  File "C:\Users\vmorey\AppData\Local\Temp\waptmgpv8_ev\setup.py", line 14, in install
    if e.returncode == 1603:
AttributeError: 'EWaptSetupException' object has no attribute 'returncode'

2024-01-12 12:07:58,670 CRITICAL Package domoprod-zimbra-connector-outlook [x64_fr_PROD] not installed due to errors : AttributeError: 'EWaptSetupException' object has no attribute 'returncode'

Results :

 === install packages ===
  domoprod-zimbra-connector-outlook [x64_fr_PROD] | domoprod-zimbra-connector-outlook (9.0.0.1941-2)

 === errors packages ===
  domoprod-zimbra-connector-outlook [x64_fr_PROD] | domoprod-zimbra-connector-outlook (9.0.0.1941-2)
Comandante

PD: Y para probarlo tú mismo, solo necesitas una instalación de Office incluyendo Outlook (x64 o x86 según el paquete, cualquier versión, Office 2016, 2019 o incluso 365)
No es necesario iniciar Outlook; si el paquete se instala, eso es todo

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 15 de enero de 2024 - 12:05 p. m.
por Vincent38
Notifiqué este problema a Zimbra el viernes y estoy esperando su respuesta.

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 21 de febrero de 2024 - 18:48
por Vincent38
Hola

. Bueno, la verdad es que es bastante complicado. Parece que el problema radica en que el instalador de ZCO (.msi) se modifica al detectar que se ejecuta en un equipo que no utiliza una versión en inglés de Windows.

De hecho, el archivo .msi es multilingüe, incluyendo el idioma de la propia instalación.
Solo hay un archivo .msi, pero al ejecutarlo en un equipo con Windows en inglés, el texto de instalación (información de derechos de autor, detalles de la licencia, nombres de los botones, etc.) se muestra en inglés, mientras que al ejecutarlo en un equipo con Windows en francés, la misma información se muestra en francés.
Sin embargo, esta modificación provoca que el instalador genere/utilice un nuevo "código de producto" (no solo cambia la clave de desinstalación, sino todas las claves correspondientes a ZCO en el registro) distinto del que aparece en la información del archivo .msi.

Y dado que wapt utiliza la clave declarada en el archivo .msi por defecto, obviamente no funciona.

No estoy seguro de cómo solucionarlo. Quizás Zimbra pueda resolver el problema. De lo contrario, ¿su herramienta (luti) es capaz de instalar automáticamente el archivo .msi para obtener la clave correcta e inyectarla en el paquete antes de publicarlo en la tienda?

Saludos.

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 8 de marzo de 2024 - 15:47
por bastien30
Buen día,

Me topé con este tema por casualidad, de hecho hice un paquete para ZCO muy recientemente, basado en el de la tienda TIS.

Mi paquete es multiarquitectura e integra ambas versiones, 32 bits y 64 bits.
La razón es simple: en una máquina de 64 bits con una versión de 32 bits de Outlook instalada, el paquete de 64 bits fallará porque ZCO no se instalará.

Mi paquete detecta la presencia de Outlook de 32 bits e instala el ZCO correspondiente (seguramente existe una forma más limpia de detectar Office).
Además, defino algunos parámetros ZCO a través del registro (los mismos parámetros que se pueden usar para personalizar el MSI, pero no quería tener que hacerlo cada vez) :D ): deshabilitar actualizaciones, dirección y puerto del servidor, uso de SSL, deshabilitar alias en la GAL y deshabilitar la sincronización de firmas.
Para adaptar según las necesidades (hay otros parámetros personalizables en esta clave de registro).

Para solucionar el problema de que la clave de desinstalación cambia según el idioma, utilizo la función uninstall() que recupera la clave de desinstalación del ZCO instalado para desinstalarlo. Por lo tanto, no utilizo la función install_msi_if_needed().

Finalmente, la única restricción es que la versión del paquete debe coincidir con la versión de ZCO de 64 bits. Si publican números de versión diferentes para las dos arquitecturas, podría causar un problema (aunque creo que es poco probable).

Edición 01/03/2025:
  • Se agregó una función de auditoría para agregar las claves de registro de Búsqueda de Windows del ZCO que se eliminaron después de una actualización automática de Office (personalmente configuré el parámetro "audit_schedule" en "10m" en el archivo de control); de lo contrario, el usuario que no es administrador recibe una solicitud de UAC cada vez que se inicia Outlook y la función de búsqueda deja de funcionar (consulte https://forums.zimbra.org/viewtopic.php?t=67734).
  • Corrección de la configuración de ZCO a través del registro en Windows de 32 bits


Aquí está el código para setup.py:

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *

def install():        
    # Check architecture and if Office is 32bits on 64bits system
    regpath = r'SOFTWARE\Zimbra'
    if is32() or isdir(makepath(programfiles32, r'Microsoft Office', r'root')):
        print(r'INFO: x86 installation detected')
        bin_name = 'ZimbraConnectorOLK_x86.msi'
        if is64():
            regpath = r'SOFTWARE\WOW6432Node\Zimbra'
    else:
        bin_name = 'ZimbraConnectorOLK_x64.msi'
    
    installed_zco = installed_softwares('Zimbra Connector for Microsoft Outlook')
    if not installed_zco or installed_zco[0]['version'] < Version(control.get_software_version(), 4) or WAPT.options.force :
        try:
            # Installing the software
            run(r'msiexec /qn /norestart /i %s' % bin_name, timeout=600)
        except Exception as e:
            if e.returncode == 1603:
                print(f'INFO: Microsoft Outlook needs to be installed.')
                error(e)
            else:
                error(e)
    else:
        print('%s version %s is already installed, skipping...' % (control.name, installed_zco[0]['version']))
    
    # Customize installation
    with reg_openkey_noredir(HKEY_LOCAL_MACHINE, r'SOFTWARE\Zimbra', sam=KEY_WRITE, create_if_missing=True) as key:
        reg_setvalue(key, 'SkipVersionUpgrade', '65535', REG_SZ)  # disable auto-update
        reg_setvalue(key, 'ZimbraServerName', 'smtp.mydomain.tld', REG_SZ)  # Zimbra server name
        reg_setvalue(key, 'ZimbraServerPort', 443, REG_DWORD)  # Zimbra server port
        reg_setvalue(key, 'ZimbraConnectionMethod', 1, REG_DWORD)  # use SSL
        reg_setvalue(key, 'GalSyncDisableAliases', 1, REG_DWORD)  # disable alias in GAL
        reg_setvalue(key, 'SigSyncEnabled', 0, REG_DWORD)  # disable signature sync

def uninstall():
    if installed_softwares('Zimbra Connector for Microsoft Outlook'):
        key = installed_softwares('Zimbra Connector for Microsoft Outlook')[0]['key']
        run('msiexec /qn /norestart /X %s' % key)
def audit():
    audit_result = "OK"
    # Check architecture and if Office is 32bits on 64bits system
    regpath = r'SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Windows\Windows Search\Preferences'
    if is64() and isdir(makepath(programfiles32, r'Microsoft Office', r'root')):
        regpath = r'SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Windows\Windows Search\Preferences'

    # Fix Windows Search ZCO registry key if needed
    # https://wiki.zimbra.com/wiki/Summary_of_the_registry_keys_that_ZCO_uses
    # https://forums.zimbra.org/viewtopic.php?t=67734
    for key in [r'{D00FDE68-3E80-4f8c-899D-D9DD16BA7D1D}', r'{FA9628A0-F223-4d5d-B314-E01BC8100572}']:
        if registry_readstring(HKEY_LOCAL_MACHINE, regpath, key) != "1":
                print(r'Fixing Windows Search ZCO registry key %s...' % key)
                registry_set(HKEY_LOCAL_MACHINE, regpath, key, 1, REG_DWORD)
                audit_result = "WARNING"

    return audit_result
    
def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies()
    if not proxies:
        proxies = get_proxies_from_wapt_console()
    url = 'https://www.zimbra.com/product/addons/zimbra-connector-for-outlook-download/'

    # Getting latest version from official sources
    print('URL used is: %s' % url)
    for arch in 'x86', 'x64':
        print('Processing %s version...' % arch)
        for bs_search in bs_find_all(url, 'a', 'rel', 'noopener', proxies=proxies):
            if '_%s.msi' % arch in bs_search.get('href', ''):
                download_url = bs_search['href']
                latest_bin = download_url.split('/')[-1]
                version = latest_bin.split('_')[1]
                break
        print('Latest %s %s version is: %s' % (control.name, arch, version))
        print('Download URL for %s is: %s' % (arch, download_url))

        # Downloading latest binaries
        print('Downloading: %s' % latest_bin)
        latest_bin = '%s_%s' % (latest_bin.split('_')[0], latest_bin.split('_')[2])
        wget(download_url, latest_bin, proxies=proxies)

        # Checking version from file
        version_from_file = get_version_from_binary(latest_bin)
        if Version(version_from_file, 4) == Version(version, 4):
            print(f'INFO: Binary file version ({version_from_file}) corresponds to online version ({version})')
        else:
            error(f'ERROR: Binary file version ({version_from_file}) do NOT corresponds to online version ({version})')

    # Changing version of the package
    if Version(version, 4) > Version(control.get_software_version(), 4):
        print('Software version updated (from: %s to: %s)' % (control.get_software_version(), Version(version)))
        control.set_software_version(version)
        control.save_control_to_wapt()
        package_updated = True
    else:
        print('Software version up-to-date (%s)' % Version(version))

    # Validating or not update-package-sources
    return package_updated

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 11 de marzo de 2024 - 15:21
por Vincent38
¡Guau, excelente trabajo!
Lo había pensado, pero es demasiado trabajo. ¡ :D
Lo adoptaré, gracias!

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 12 de marzo de 2024 - 00:35
por Vincent38
Respecto al problema con la clave de desinstalación incorrecta, recibí comentarios de Zimbra; confirmaron el problema, se abrió un informe de error y espero que se solucione en futuras versiones de ZCO. :D

Re: |PAQUETE] ZIMBRA-ZCO 9.0.0.1941 (x64 y x86)

Publicado: 12 de marzo de 2024 - 15:29
por bastien30
Hola,

gracias por tus comentarios.
Es cierto que si lo solucionan, mejor.

Pero dada su lentitud para corregir errores, no creo que suceda pronto. :rollo: