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")
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)
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/
