3CX

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti Wapt.
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
Risposta
smandel
Messaggi: 111
Registrazione: 5 maggio 2022 - 11:30

4 aprile 2025 - 11:31

Buongiorno,

La versione "msi" del client 3CX non viene più aggiornata e non ho trovato un pacchetto nello store WAPT che offra la versione MSIX aggiornata.
Ho quindi creato un pacchetto per chi potrebbe essere interessato, ispirandomi al pacchetto Teams UWP disponibile nello store.
Devi prima scaricare le ultime versioni di MSIX da https://store.rg-adguard.net/
Probabilmente ci sono modi migliori per scrivere il codice, ma funziona :)

setup.py

Codice: Seleziona tutto

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

appx_package_name = "3CX"
appx_dir = makepath(systemdrive,programfiles, "3CX", "3CX.msix")
appx_dir_dependance = makepath(systemdrive,programfiles, "3CX", "Microsoft.WindowsAppRuntime.1.6.msix")

def install():
    # Declare local variables
    bin_path = glob.glob(f"{appx_package_name}*.msix")[0]
    bin_path_dependance = glob.glob(f"Microsoft.WindowsAppRuntime.1.6.msix")[0]
    mkdirs(makepath(systemdrive,programfiles,"3CX"))

    filecopyto(bin_path, appx_dir)
    filecopyto(bin_path, appx_dir_dependance)

    # Remove old versions
    appxprovisionedpackage = run_powershell(f'Get-AppXProvisionedPackage -Online | Where-Object DisplayName -Like "{appx_package_name}*"')
    if appxprovisionedpackage is None:
        remove_appx(appx_package_name, False)
        appxprovisionedpackage = {"Version": "0"}
    elif force:
        uninstall()

    #Installing the application
    if Version(appxprovisionedpackage["Version"], 4) < Version(control.get_software_version(), 4):
        print(f"Installing: {bin_path.split(os.sep)[-1]} ({control.get_software_version()})")
        killalltasks(ensure_list(control.impacted_process))
        run_powershell(f'Add-AppxProvisionedPackage -Online -PackagePath "{bin_path_dependance}" -SkipLicense')
        run_powershell(f'Add-AppxProvisionedPackage -Online -PackagePath "{bin_path}" -SkipLicense')

    else:
        print(f'{appxprovisionedpackage["PackageName"]} is already installed and up-to-date.')

    if isdir(makepath(programfiles,"3CX")):
        remove_tree(makepath(programfiles,"3CX"))

def uninstall():
    print(f"Removing AppX: {appx_package_name}")
    remove_appx(appx_package_name)


def audit():
    # Declaring local variables
    audit_result = "OK"
    audit_version = True
    appxprovisionedpackage = run_powershell(f'Get-AppXProvisionedPackage -Online | Where-Object DisplayName -Like "{appx_package_name}*"')

    # Auditing software
    if appxprovisionedpackage is None:
        print(f"{appx_package_name} is not installed.")
        audit_result = "ERROR"
    elif audit_version:
        if Version(appxprovisionedpackage.get("Version", "0"), 4) < Version(control.get_software_version(), 4):
            print(
                f'{appxprovisionedpackage["PackageName"]} is installed in version: {appxprovisionedpackage["Version"]} instead of: {control.get_software_version()}.'
            )
            audit_result = "WARNING"
        else:
            print(f'{appxprovisionedpackage["PackageName"]} is installed and up-to-date.')
    else:
        print(f'{appxprovisionedpackage["PackageName"]} is installed.')

    return audit_result


def remove_appx(package, default_user=True):
    """Remove Windows AppX package from the computer environment, excluding NonRemovable packages.

    Args:
        package (str): AppX package name. You can use an asterisk (*) as a wildcard.
        default_user (bool): Remove AppX package from the Windows image to prevent installation for new users.

    .. versionchanged:: 2.5
        No longer try to remove NonRemovable AppX package

    .. versionchanger:: 2.6
        No longer use run_powershell for uninstall
    """

    if running_as_admin() or running_as_system():
        if default_user:
            ps_script = f'Get-AppXProvisionedPackage -Online | Where-Object DisplayName -Like ""{package}*"" | Remove-AppxProvisionedPackage -Online -AllUsers'
            run_powershell_script(ps_script, output_format="text")

        ps_script = f'Get-AppxPackage -Name ""{package}*"" -AllUsers | Where-Object -property NonRemovable -notlike True | Remove-AppxPackage -AllUsers'
        run_powershell_script(ps_script, output_format="text")

    else:
        ps_script = f'Get-AppxPackage -Name ""{package}"" | Where-Object -property NonRemovable -notlike True | Remove-AppxPackage'
        run_powershell_script(ps_script, output_format="text")
aggiornamento-pacchetto.py

Codice: Seleziona tutto

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


def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies()
    if not proxies:
        proxies = get_proxies_from_wapt_console()

    download_url = "https://downloads-global.3cx.com/downloads/3cxsoftphone/3CX.msix"
    latest_bin = download_url.split("/")[-1]

    # Deleting binaries
    remove_file(latest_bin)

    # Downloading latest binaries
    print("Download URL is: %s" % download_url)
    if not isfile(latest_bin):
        print("Downloading: %s" % latest_bin)
        wget(download_url, latest_bin, proxies=proxies)
    else:
        print("Binary is present: %s" % latest_bin)

    # Checking version from file
    if get_os_name() == "Windows" and "windows" in control.target_os.lower():
        version_bin = unzip(latest_bin, ".", "3CXSoftphone.exe")[0]
        version = get_version_from_binary(version_bin).split("+")[-2]
        remove_file((version_bin))
    else:
        version = control.get_software_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)))
        package_updated = True
    else:
        print("Software version up-to-date (%s)" % Version(version))
    control.set_software_version(version)
    control.save_control_to_wapt()

    # Validating update-package-sources
    return package_updated

    # # Changing version of the package and validating update-package-sources
    # return complete_control_version(control, version)
controllare

Codice: Seleziona tutto

package           : xxx-3cx-msix
version           : 20.0.751.0-3
architecture      : x64
section           : base
priority          : optional
name              : 3CX
categories        : Office
maintainer        : xxx
description       : 3CX is a unified communications application that allows users to manage their calls, messages and meetings
depends           :
conflicts         :
maturity          : PROD
locale            : all
target_os         : windows
min_wapt_version  : 2.3
sources           : https://downloads-global.3cx.com/downloads/3cxsoftphone/3CX.msix
installed_size    : 271764868
impacted_process  : 3CXSoftphone
description_fr    : 3CX est une application de communication unifiée permettant aux utilisateurs de gérer leurs appels, leurs messages et leurs réunions
description_pl    : 3CX to aplikacja do ujednoliconej komunikacji, która pozwala użytkownikom zarządzać połączeniami, wiadomościami i spotkaniami
description_de    : 3CX ist eine Unified-Communications-Anwendung, mit der Benutzer ihre Anrufe, Nachrichten und Besprechungen verwalten können
description_es    : 3CX es una aplicación de comunicaciones unificadas que permite a los usuarios gestionar sus llamadas, mensajes y reuniones
description_pt    : A 3CX é uma aplicação de comunicações unificadas que permite aos utilizadores gerir as suas chamadas, mensagens e reuniões
description_it    : 3CX è un'applicazione per le comunicazioni unificate che consente agli utenti di gestire chiamate, messaggi e riunioni
description_nl    : 3CX is een toepassing voor Unified Communications waarmee gebruikers hun gesprekken, berichten en vergaderingen kunnen beheren
description_ru    : 3CX - это приложение для унифицированных коммуникаций, которое позволяет пользователям управлять своими звонками, сообщениями и встречами
audit_schedule    :
editor            : 3CX Software DMCC
keywords          : collaboration,meetings,video
licence           : proprietary_free,wapt_public
homepage          : https://www.3cx.com/
package_uuid      : 628a2ed4-e0b3-4e80-8fc6-87788d9a07b3
valid_from        :
valid_until       :
forced_install_on :
changelog         : https://www.3cx.com/blog/change-log/windows-app/
smandel
Messaggi: 111
Registrazione: 5 maggio 2022 - 11:30

4 aprile 2025 - 11:34

E non dimenticare di distribuire queste chiavi di registro sulle workstation o tramite GPO per evitare errori durante l'installazione del pacchetto:

Codice: Seleziona tutto

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Appx]
"AllowDevelopmentWithoutDevLicense"=dword:00000001
"AllowAllTrustedApps"=dword:00000001
Risposta