tis-quickassist
2023.531.2326.0-24
Quick Assist is an app in Windows 10 and Windows 11 that enables you to receive or provide assistance with your PC over a remote connection. The current built-in Quick Assist app is reaching end of service.
2831 downloads
See build result See VirusTotal scan
Description
- package : tis-quickassist
- name : QuickAssist
- version : 2023.531.2326.0-24
- categories : System and network
- maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ,Pierre COSSON
- installed_size : 2023424
- editor : Microsoft
- licence : Proprietary
- signature_date : 2023-06-12T05:01:37.980600
- size : 4.53 Mo
- locale : all
- target_os : windows
- impacted_process : QuickAssist
- architecture : all
- Homepage : https://insider.office.com/fr/blog/remote-assistance-with-quick-assist-is-changing
- Depends :
control
package : tis-quickassist
version : 2023.531.2326.0-24
architecture : all
section : base
priority : optional
name : QuickAssist
categories : System and network
maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ,Pierre COSSON
description : Quick Assist is an app in Windows 10 and Windows 11 that enables you to receive or provide assistance with your PC over a remote connection. The current built-in Quick Assist app is reaching end of service.
depends : tis-microsoft-vclibs-140-00-uwpdesktop
conflicts :
maturity : PROD
locale : all
target_os : windows
min_wapt_version : 2.2
sources : https://apps.microsoft.com/store/detail/9P7BP5VNWKX5
installed_size : 2023424
impacted_process : QuickAssist
description_fr :
description_pl :
description_de :
description_es :
description_pt :
description_it :
description_nl :
description_ru :
audit_schedule :
editor : Microsoft
keywords :
licence : Proprietary
homepage : https://insider.office.com/fr/blog/remote-assistance-with-quick-assist-is-changing
package_uuid : c378d7ec-8dcb-4277-8057-cede182e0a9f
valid_from :
valid_until :
forced_install_on :
changelog :
min_os_version : 10.0
max_os_version :
icon_sha256sum : 2d1328d547a7e17e3c5432dab41ce0713634bca5d579b3c4ac40913f685d27bb
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature : YRJrjI76cd/gYdfYDRVerbueI8CMJq8+XUY2X7ecjrMK1Xig4HFlyDvjQ/cX39/jPu2byHLd0Fw2HR1IPAFm42MWWMl2WqY+0u5lbfa8D8HcKlu7s0EbxHG36mRY0jQRi6nSjT+6O0L0T5F4brailoLei27GLIcTaAVM9qUCllnaUm/y5zPZnjl6Gl7VKQI80QNXzBY83U6ND92HVylJajUzin9hF+eAZxNuHW3nllsvn7myEZYKjV+yn34MW0CLncqNH+DQKTJoj8qKJEZ1+AbcB7FC379CmN0ddqWx2eIeLiu6C6HwUo03CNncbHzcqQKvm41N8v7MbYAzHsmMow==
signature_date : 2023-06-12T05:01:37.980600
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
Setup.py
# -*- coding: utf-8 -*-
from setuphelpers import *
appx_package = "MicrosoftCorporationII.QuickAssist"
appx_dir = makepath(programfiles, "WindowsAppsInstallers")
windows_min_os_version = WindowsVersions.Windows10v1607
allow_remove = True
def install():
# Declaring local variables
bin_name = glob.glob("%s*%s*" % (appx_package, control.get_software_version()))[0]
bin_path = makepath(appx_dir, bin_name)
# Checking minimum Windows version for this UWP application
if windows_version() >= windows_min_os_version:
if not isdir(appx_dir):
mkdirs(appx_dir)
else:
for appx_file in glob.glob(makepath(appx_dir, "%s*%s*" % (appx_package, control.get_software_version()))):
if not control.get_software_version() in appx_file:
remove_file(appx_file)
if not isfile(bin_path):
print("Copying: %s to: %s" % (bin_name, appx_dir))
filecopyto(bin_name, appx_dir)
else:
error(
"This Windows version (%s) need to be upgraded to minimum version (%s) to use this package" % (windows_version(), windows_min_os_version)
)
def session_setup():
# Declaring local variables
bin_path = glob.glob(makepath(appx_dir, "%s*%s*" % (appx_package, control.get_software_version())))[0]
# Installing the software in user env
appx_version = get_powershell_str("Get-AppxPackage -Name %s" % appx_package, "Version")
if not appx_version or appx_version < control.get_software_version() or force:
print("Installing: %s" % bin_path.split("\\")[-1])
run_powershell('Add-AppxPackage -Path "%s"' % bin_path)
else:
print("%s is installed in correct version (%s)" % (appx_package, appx_version))
def uninstall():
if allow_remove:
remove_appx(appx_package)
for appx_file in glob.glob(makepath(appx_dir, "%s*%s*" % (appx_package, control.get_software_version()))):
remove_file(appx_file)
if isdir(appx_dir) and dir_is_empty(appx_dir):
print("Removing: %s since he is empty" % (appx_dir))
remove_tree(appx_dir)
update_package.py
# -*- coding: utf-8 -*-
from setuphelpers import *
import requests
try:
from setupdevhelpers import *
except:
from bs4 import BeautifulSoup
import json
import waptguihelper
import re
def update_package():
# Declaring local variables
package_updated = False
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
store_url = control.sources
if not store_url:
store_id = waptguihelper.input_dialog(
"Choice of app", "Enter the windows store app id (foundable in package url: https://apps.microsoft.com/store/apps)", store_url
).split("/")[-1]
else:
store_id = store_url.split("/")[-1]
store_id = store_id.split("?")[0]
url_ms = "https://apps.microsoft.com/store/detail/%s" % store_id
control.sources = url_ms
control.save_control_to_wapt()
package_prefix = control.package.split("-")[0]
# check setup.py incase the package name doesnt match the installer file
with open("setup.py", "r") as f:
for line in f.readlines():
if line.startswith("appx_package"):
store_package_name = line.split("=")[1].split('"')[1]
break
# Getting info from adguard api
res = requests.post(
"https://store.rg-adguard.net/api/GetFiles",
"type=ProductId&url=%s&ring=RP&lang=fr-FR" % store_id,
headers={"content-type": "application/x-www-form-urlencoded"},
proxies=proxies,
)
all_files = []
page = BeautifulSoup.BeautifulSoup(res.content, features="html.parser")
for bs_search in page.find_all("a"):
if not "BlockMap" in bs_search.text and not "eappxbundle" in bs_search.text and not "emsixbundle" in bs_search.text:
version = bs_search.text.split("_")[1]
bin_name = bs_search.text.replace("~", "_")
download_url = bs_search["href"]
pkg_splitted = re.split(r"_\d+\.", bin_name)[0]
package_name = package_prefix + "-" + pkg_splitted.split("_")[0].replace(".", "-").lower()
software_name = bin_name.split("_")[0].replace("-", " ").replace(".", " ")
if "arm64" in bin_name:
package_arch = "arm64"
elif "arm" in bin_name:
package_arch = "arm"
elif "x64" in bin_name:
package_arch = "x64"
elif "x86" in bin_name:
package_arch = "x86"
else:
package_arch = "all"
file_dict = {
"version": version,
"bin_name": bin_name,
"package_name": package_name,
"software_name": software_name,
"package_arch": package_arch,
"download_url": download_url,
}
all_files.append(file_dict)
if "template-microsoft-store" in control.package:
selected = waptguihelper.grid_dialog(
"Please select the proper file",
json.dumps(all_files),
waptguihelper.GRT_SELECTED,
'{"columns":[{"propertyname":"version","datatype":"String","required":false,"readonly":false,"width":130},{"propertyname":"bin_name","datatype":"String","required":false,"readonly":false,"width":420},{"propertyname":"package_name","datatype":"String","required":false,"readonly":false,"width":190},{"propertyname":"software_name","datatype":"String","required":false,"readonly":false,"width":172},{"propertyname":"package_arch","datatype":"String","required":false,"readonly":false,"width":88},{"propertyname":"download_url","datatype":"String","required":false,"readonly":false,"width":1472}]}',
)
else:
selected = [a for a in all_files if (control.architecture in a["package_arch"] or control.architecture == "all")]
if len(selected) != 1:
higer_version = "0"
for a in all_files:
if Version(higer_version) < Version(a["version"]) and store_package_name in a["bin_name"]:
higer_version = a["version"]
selected = [a for a in selected if higer_version == a["version"] and store_package_name in a["bin_name"]]
bin_selected = selected[0]
latest_bin = bin_selected["bin_name"]
version = bin_selected["version"]
download_url = bin_selected["download_url"]
package_name = bin_selected["package_name"]
software_name = bin_selected["software_name"]
package_arch = bin_selected["package_arch"]
if download_url.split("/")[2].endswith("microsoft.com"):
if not isfile(latest_bin):
print("Downloading: %s" % latest_bin)
wget(download_url, latest_bin, proxies=proxies)
else:
print("Binary file version corresponds to online version")
else:
print("ERROR: The retrieved url will not download from microsoft's servers")
# Adding dependencies
control.depends = ""
for dependency in list(set(d["package_name"] for d in all_files)):
if dependency not in control.depends and package_name != dependency:
control.add_depends(dependency)
# Warn end-user that depencies are required
missing_depends = []
for d in control.depends.split(","):
if not WAPT.is_available(d) and d != "":
missing_depends.append(d)
if missing_depends and "template" in control.package:
waptguihelper.message_dialog(
control.package,
'The following packages are not found in your repo, you must import them or use "template-microsoft-store-dependency" to create them with the same Store ID as this package\n\n%s'
% "\n".join(a for a in missing_depends),
)
# Asking pkg infos if needed
ask_control_categories()
control.architecture = package_arch
ask_control_package(package_name, "template-microsoft-store", remove_base_files=True)
ask_control_name(software_name, "Template Microsoft Store")
ask_control_description("update_package")
# Changing setup.py appx_package variable
new_lines = []
with open("setup.py", "r") as f:
for line in f.readlines():
if line.startswith("appx_package"):
line = 'appx_package = "%s"\n' % latest_bin.split("_")[0]
new_lines.append(line)
with open("setup.py", "w") as f:
f.writelines(new_lines)
# Changing version of the package
if Version(version) > Version(control.get_software_version()):
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()
# Deleting outdated binaries
remove_outdated_binaries(version, ["appxbundle", "msixbundle", "appx", "msix", "part"], latest_bin)
# Validating or not update-package-sources
return package_updated
def ask_control_description(blank_str=None):
"""Requesting that the user supply package description for the control.description field
Args:
blank_str (str): The description will be cleared if it includes the specified string to avoid using the template description (default: do not clear description)
"""
if not control.description:
control.description = waptguihelper.input_dialog("Description", "Please fill the description", control.description)
control.save_control_to_wapt()
if blank_str is not None and blank_str in control.description:
control.description = ""
control.save_control_to_wapt()
return control.description
def ask_control_categories():
"""Requesting that the user supply package categories for the control.categories field if empty or Template is selected"""
if control.categories == "" or control.categories == "Template":
categories = waptguihelper.grid_dialog(
"Select package categories",
[
"Internet",
"Utilities",
"Messaging",
"Security",
"System and network",
"Media",
"Development",
"Office",
"Drivers",
"Education",
"Configuration",
"CAD",
"Template",
"Dependencies",
"Extensions",
],
waptguihelper.GRT_SELECTED,
)
if categories:
control.categories = ",".join([a["unknown"] for a in categories])
else:
control.categories = ""
control.save_control_to_wapt()
return control.categories
def ask_control_package(control_package, conditionnal_package_name=None, remove_base_files=False):
"""Requesting that the user provide a package name to be entered into the control.package field, and offering the possibility of removing the base files (icon.png and changelog.txt) for template package usage
Args:
control_package (str) : prefilled control_package (default: actual control_package)
conditionnal_package_name (str) : only ask when the control.package contains conditionnal_package_name (default: always ask for control_package)
remove_base_files (bool) : removes base files if parameter is True and conditionnal_package_name is provided (default: False)
"""
if conditionnal_package_name is None or conditionnal_package_name in control.package:
control.package = waptguihelper.input_dialog(control.package, "You can redefine the package name", control_package)
control.save_control_to_wapt()
# Removing template files
if conditionnal_package_name in control.package and remove_base_files:
if isfile("WAPT\\changelog.txt"):
remove_file("WAPT\\changelog.txt")
if isfile("WAPT\\icon.png"):
remove_file("WAPT\\icon.png")
return control.package
def ask_control_name(control_name, conditionnal_package_name=None):
"""Requesting that the user provide a package name to be entered into control.name field
Args:
control_name (str) : prefilled control_name (default: control.name)
conditionnal_package_name (str) : only ask when the control.name contains conditionnal_package_name (default: always ask for control_name)
"""
if conditionnal_package_name is None or conditionnal_package_name in control.name:
control.name = waptguihelper.input_dialog(control.name, "You can redefine the name for the self-service", control_name)
control.save_control_to_wapt()
return control.name
f43640101d6088718680ae1e0ebe1d8ea9a5653514a9d8b7a380fe43ce1714bb : setup.py
a9ab1842f06b526299c3ee5e0220c731031fa0367b81a712431eacd80ccfd652 : MicrosoftCorporationII.QuickAssist_2023.531.2326.0_neutral___8wekyb3d8bbwe.appxbundle
00729db164d83333915039421b85ea68121b208aa9676a8b91f50d2d27587f50 : update_package.py
2d1328d547a7e17e3c5432dab41ce0713634bca5d579b3c4ac40913f685d27bb : WAPT/icon.png
a5a97261381e1d0ad46ee15916abec9c2631d0201f5cc50ceb0197a165a0bbbf : WAPT/certificate.crt
3a918f0ed4abd077fce4a6edac1ef4d0e16db91b22e3f49d3e88bc9f7d069db6 : luti.json
29fc13c5979582cb1fef073a0bf007844e2fe01454c4f71064162e4e8e75fce2 : WAPT/control