[RESOLVED] Veyon Add-ons Package

Questions about WAPT Packaging / Requests and help regarding Wapt packages.
Forum Rules
Community Forum Rules
* English support on www.reddit.com/r/wapt
* French community support is available on this forum
* Please prefix the topic title with [RESOLVED] if it is resolved.
* Please do not edit a topic that is tagged [RESOLVED]. Open a new topic referencing the old one.
* Specify the installed WAPT version, full version, and build number (2.2.1.11957 / 2.2.2.12337 / etc.) as well as the Enterprise/Discovery edition.
* Versions 1.8.2 and earlier are no longer supported. The only questions accepted regarding version 1.8.2 are related to upgrading to a supported version (2.1, 2.2, etc.).
* Specify the server OS (Linux/Windows) and version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specify the OS of the administration/package creation machine and the machine with the problematic agent, if applicable (Windows 7/10/11/Debian 11/etc.).
* Avoid asking multiple questions when opening a topic, otherwise it may be ignored. If there are multiple topics, open separate topics, preferably one after the other and not all at the same time (i.e., do not spam the forum).
* Include code snippets, screenshots, and other images directly in the post. Links to Pastebin, Bitly, and other third-party sites will be systematically removed.
* As with any community forum, support is provided voluntarily by members. If you require commercial support, you can contact Tranquil IT's sales department at 02.40.97.57.55
Locked
lfkl
Messages: 35
Registration: Apr 11, 2019 - 05:51

June 9, 2026 - 04:07

Good morning,

We actively use Veyon and everything works.
We will be purchasing certain add-ons from Veyon.
This requires the installation of the plugin: veyon-addons-4.10.4.0-win64-setup.exe
See document:
https://veyon.io/en/addons/

Below I'm sharing a package that's certainly not very well coded but functional:

Code: Select all

# -*- 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

def install():
    bin_name = glob.glob("veyon-addons-*.exe")[0]
    silentflags = "/S"
    install_exe_if_needed(
        bin_name,
        silentflags=silentflags,
        key="",
        min_version=control.get_software_version(),
        timeout=300,
    )
If this package could ever be optimized and made available on the Wapt Store with "update.py", it would be greatly appreciated here ;)

Good day.
Last edited by lfkl on June 15, 2026 - 04:24, edited 2 times.
italbot
Messages: 78
Registration: Sep 26, 2023 - 3:50 p.m.

June 9, 2026 - 09:31

Hello,

I'll take a look at that. So, ideally, this package should be added as a dependency of the tis-veyon package?

Regards,

Ingrid
Tranquil IT
lfkl
Messages: 35
Registration: Apr 11, 2019 - 05:51

June 9, 2026 - 10:33

Hi Ingrid,

Thank you so much!

What's important is that the "tis-veyon" package and the "tis-add-on-veyon" package have the same version number, according to the documentation; otherwise, there's a risk of incompatibility.

I contacted the Veyon developer, and they informed me that this add-on package is only needed on the client and master workstation side and that it must include the institution's specific "Veyon installation ID" license.
So, it might not necessarily be a dependency, as other institutions may not make the same choice as us, and the institution's specific license must also be included in this package.

However, it's not a deal-breaker; even without a license, it only allows the addition of demo features if placed as a dependency.

Have a good day!
italbot
Messages: 78
Registration: Sep 26, 2023 - 3:50 p.m.

June 9, 2026 - 10:43

Okay, indeed, if it also needs to be the same version, I won't make it a dependency.
I'll keep you posted if I manage to package it.

Best regards,

Ingrid
Tranquil IT
italbot
Messages: 78
Registration: Sep 26, 2023 - 3:50 p.m.

June 9, 2026 - 5:37 PM

The update_package() function is working correctly. However, is there any way to know when these add-ons are installed or uninstalled?

Sincerely,

Ingrid
Tranquil IT
lfkl
Messages: 35
Registration: Apr 11, 2019 - 05:51

June 10, 2026 - 04:00

However, is there no way to know when these add-ons are installed or uninstalled?
Indeed, I haven't seen any uninstallation option via the Windows control panel (no entry after installation) or even a key via the wapt-get list-registry command...

I've only noticed that installing a newer version of "Veyon" seems to make its plugins disappear from "Veyon Configurator" until the newer version of "Veyon add-ons" is reinstalled

In our institution, we have chosen to create different Veyon packages depending on whether "Veyon Master" is installed or not.
Examples:
Veyon-cdi-profs, Veyon-maths-profs, Veyon-labs-profs, etc... install "Veyon Master".
However, it will not be assigned to the "veyon-eleves" package

In the end, it's not a blocking issue; we can assign "Veyon adds-on" as a dependency of the "Veyons-xxx-profs" packages, we just need to make sure we have the same version for our packages.

Best regards.
italbot
Messages: 78
Registration: Sep 26, 2023 - 3:50 p.m.

June 11, 2026 - 12:23

Good morning,

I'm sending you the code I wrote for the `update_package()` and the installation, as well as a pseudo-uninstallation, because I did find a registry key for the add-ons, but it doesn't remove the files installed in the Veyon folder. I tried running `audit()` to verify the installation by comparing the files with those installed by default in Veyon, but I doubt these files will remain the same in future versions. That's why we'll discuss internally whether to add it to the store. At least you can create the package yourself using the code below:

Code: Select all

from setuphelpers import *

def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies()
    if not proxies:
        proxies = get_proxies_from_wapt_console()
    update_dict = {"windows": ".exe"}
    url = "https://veyon.io/en/addons/#download"

    # Getting latest version information from official sources
    print("API used is: %s" % url)
    for bs_search in bs_find_all(url, "a", "class", "btn btn-dl btn-primary", proxies=proxies):
        if "setup.exe" in bs_search["href"]:
            download_url = bs_search["href"]
            latest_bin = download_url.split("/")[-1]
            version = latest_bin.split("-",3)[2]
            break

    # Downloading latest binaries
    print(f"Latest version of {control.name} is: {version}")
    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)

    # Changing version of the package
    if Version(version) > Version(control.get_software_version()):
        print(f"Software version updated (from: {control.get_software_version()} to: {Version(version)})")
        package_updated = True
    else:
        print(f"Software version up-to-date ({Version(version)})")

    # Deleting binaries
    for f in glob.glob("*.exe"):
        if f != latest_bin:
            remove_file(f)
    
    control.set_software_version(version)
    control.save_control_to_wapt()

    return package_updated

Code: Select all

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


def install():
    # Declaring local variables
    bin_name = glob.glob("veyon-addons-*-win64-setup.exe")[0]

    # Installing the software
    print("Installing: %s" % bin_name)
    install_exe_if_needed(
        bin_name,
        silentflags="/S",
        key="",
        min_version=control.get_software_version(),
    )


def audit() : 

    files_list = ["auvidus.dll","chat.dll", "entraidconnector.dll", "internetaccesscontrol.dll", "internetaccesscontrol-firewall.dll", "internetaccesscontrol-routing.dll", "licensing.dll", "network-discovery.dll", "screenrecorder.dll"]
    
    if isdir(makepath(programfiles, "Veyon", "plugins")) : 
        common_elements = set(files_list) - set(os.listdir(makepath(programfiles, "Veyon", "plugins")))
        if list(sorted(common_elements)) == sorted(files_list): 
            result =  "OK"
        else : result = "ERROR"
    else : 
        result = "ERROR"

    return result


def uninstall() : 

    if reg_key_exists(HKEY_LOCAL_MACHINE, makepath("SOFTWARE", "WOW6432Node", r"Veyon Solutions")) :
        registry_deletekey(HKEY_LOCAL_MACHINE, makepath("SOFTWARE", "WOW6432Node"), r"Veyon Solutions", recursive = True)
Good day.

Sincerely,

Ingrid
Tranquil IT
lfkl
Messages: 35
Registration: Apr 11, 2019 - 05:51

June 12, 2026 - 05:55

Hello Ingrid,

Thank you very much for this package and the setup.py file, it works very well for installation and updating.

However, the audit is flawed:

Code: Select all

Installing: veyon-addons-4.10.4.0-win64-setup.exe
Installing: veyon-addons-4.10.4.0-win64-setup.exe (4.10.4.0)
After checking in "C:\Program Files\Veyon\plugins", all the plugin files are indeed present:

Code: Select all

files_list = ["auvidus.dll","chat.dll", "entraidconnector.dll", "internetaccesscontrol.dll", "internetaccesscontrol-firewall.dll", "internetaccesscontrol-routing.dll", "licensing.dll", "network-discovery.dll", "screenrecorder.dll"]
In addition to the basic ones installed by Veyon.

However, the uninstallation doesn't seem to work, but in our case, it's not a big deal.

Thank you and have a great day.
italbot
Messages: 78
Registration: Sep 26, 2023 - 3:50 p.m.

June 12, 2026 - 11:31

Good morning,

Can you retest the audit with this script?

Code: Select all

def audit() : 

    files_list = ["auvidus.dll","chat.dll", "entraidconnector.dll", "internetaccesscontrol.dll", "internetaccesscontrol-firewall.dll", "internetaccesscontrol-routing.dll", "licensing.dll", "network-discovery.dll", "screenrecorder.dll"]

    files_list = sorted(files_list)
    
    if isdir(makepath(programfiles, "Veyon", "plugins")) : 
        installed_files_list = sorted(os.listdir(makepath(programfiles, "Veyon", "plugins")))
        common_elements = set(files_list).intersection(installed_files_list)
        if sorted(common_elements) == sorted(files_list): 
            result =  "OK"
        else : result = "ERROR"

    else : 
        result = "ERROR"

    return result
Regarding uninstallation, that's why I'm hesitant to add such a package to the store. You could add the option to remove installed files, but I imagine that will change over time...

Sincerely,

Ingrid
Tranquil IT
lfkl
Messages: 35
Registration: Apr 11, 2019 - 05:51

June 15, 2026 - 04:23

Good morning,

The audit is now working well by classifying the files.
files_list = sorted(files_list)
Thank you for your help with this package and have a good day!
Locked