tis-microsoft-office-2021-professional
16.0.14332.20637-13
Microsoft Office 2021 is a version of the Microsoft Office suite
38 downloads
See build result See VirusTotal scan
Description
- package : tis-microsoft-office-2021-professional
- name : Office LTSC Professional Plus 2021
- version : 16.0.14332.20637-13
- categories : Office
- maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ,Clément Baziret
- installed_size : 2362231960
- editor : Microsoft
- licence : proprietary_restricted,wapt_public
- signature_date : 2024-02-21T15:01:32.458795
- size : 1.93 Go
- locale : all
- target_os : windows
- impacted_process : EXCEL,GROOVE,MSACCESS,MSPUB,ONENOTE,OUTLOOK,POWERPNT,WINWORD
- architecture : x64
- Homepage : https://www.office.com/
- Conflicts :
control
package : tis-microsoft-office-2021-professional
version : 16.0.14332.20637-13
architecture : x64
section : base
priority : optional
name : Office LTSC Professional Plus 2021
categories : Office
maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ,Clément Baziret
description : Microsoft Office 2021 is a version of the Microsoft Office suite
depends :
conflicts : tis-microsoft-access-2016-runtime,tis-microsoft-office-2016,tis-microsoft-office-2013,tis-microsoft-office-365-entreprise,tis-microsoft-office-2019-professional
maturity : PROD
locale : all
target_os : windows
min_wapt_version : 2.3
sources : https://www.microsoft.com/download/details.aspx?id=49117
installed_size : 2362231960
impacted_process : EXCEL,GROOVE,MSACCESS,MSPUB,ONENOTE,OUTLOOK,POWERPNT,WINWORD
description_fr : Microsoft Office 2021 est une version de la suite Microsoft Office
description_pl : Microsoft Office 2021 to wersja pakietu biurowego Microsoft Office
description_de : Microsoft Office 2021 ist eine Version der Microsoft Office-Suite
description_es : Microsoft Office 2021 es una versión del paquete Microsoft Office
description_pt : O Microsoft Office 2021 é uma versão do pacote Microsoft Office
description_it : Microsoft Office 2021 è una versione della suite Microsoft Office
description_nl : Microsoft Office 2021 is een versie van de Microsoft Office-suite
description_ru : Microsoft Office 2021 - это версия пакета Microsoft Office
audit_schedule :
editor : Microsoft
keywords : microsoft,office,2021,version,suite
licence : proprietary_restricted,wapt_public
homepage : https://www.office.com/
package_uuid : 867f7c5d-d17a-4102-9bad-cafa4bd964b5
valid_from :
valid_until :
forced_install_on :
changelog :
min_os_version : 10.0
max_os_version :
icon_sha256sum : 2ac98141bf5b6777083f2bcbeab3ab034c01dff77718e108774575aaaa54a144
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature : wrZfdhuZnDrezJg0SChx0XGoTEcnesBB9xegzB2mfMDpLkriQ/M8C7tMe5yG1KqTt1I4BhHmkzCX7lQ9vFGvEcZ5kd8BGRaoIqTfK5uPLLkWvBShSM7YzDF+seFsvEB6TsOiY2w6zJo5aVI86ySN9JuvcoTLoqrXIXOuW7tIdpnlUJKzBAhx9aLy9B9s0zM/aTatPrBq2hnJbCO4oN8GF4wwsPT6hs7QEbRfo50rKwc588Vi5vz3OFHKUIIq9Bv5fDzxNnXeOyti/8e2NhwFaN0WCenxjJD4RMxJPKMcTO9ShCvZN5+tDRAOpB/IA06H560rLcX7I8tzS+RmzKldCQ==
signature_date : 2024-02-21T15:01:32.458795
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 *
import tempfile
"""
Ressources:
https://config.office.com/deploymentsettings
https://admx.help/?Category=Office2016&Policy=office16.Office.Microsoft.Policies.Windows::L_SCLCacheOverride
https://admx.help/?Category=Office2016&Policy=excel16.Office.Microsoft.Policies.Windows::L_SaveExcelfilesas
"""
app_uninstallkey = "ProPlus2021Volume - fr-fr"
def install():
# Declaring local variables
package_version = control.get_software_version()
silentflags = "/configure configuration.xml"
# uninstalling older versions of office if needed
uninstall_mso2013_if_needed("Office15.STANDARD")
uninstall_mso2016_if_needed("Office16.STANDARD")
uninstall_other_office_edition(app_uninstallkey.split(" ")[0])
# Installing the software
install_exe_if_needed(
"setup.exe",
silentflags=silentflags,
timeout=1200,
accept_returncodes=[1641, 3010, 0],
key=app_uninstallkey,
min_version=package_version,
)
# TODO "setup.exe /customize configuration.xml if up-to-date"
# Adding silent uninstall command
quiet_uninstall = installed_softwares(uninstallkey=app_uninstallkey)[0]["uninstall_string"] + " DisplayLevel=False"
if "OfficeClickToRun.exe" in quiet_uninstall:
register_uninstall(
uninstallkey=app_uninstallkey,
quiet_uninstall_string=quiet_uninstall,
)
def session_setup():
print("Disabling: MSO telemetry")
# https://admx.help/?Category=Office2016&Policy=office16.Office.Microsoft.Policies.Windows::L_OfficeOSMPreventedHostApplications
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "wdsolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "xlsolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "pptsolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "olksolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "accesssolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "projectsolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "publishersolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "visiosolution", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedapplications", "onenotesolution", 1)
# https://admx.help/?Category=Office2016&Policy=office16.Office.Microsoft.Policies.Windows::L_OfficeOSMPreventedSolutionTypes
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedsolutiontypes", "documentfiles", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedsolutiontypes", "templatefiles", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedsolutiontypes", "comaddins", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedsolutiontypes", "appaddins", 1)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm\preventedsolutiontypes", "agave", 1)
# https://admx.help/?Category=Office2016&Policy=office16.Office.Microsoft.Policies.Windows::L_EnableLogging
# registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm", "enablelogging", 0)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm", "enableupload", 0)
registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\osm", "enablefileobfuscation", 1)
# # https://admx.help/?Category=Office2016&Policy=office16.Office.Microsoft.Policies.Windows::L_Onlinecontentoptions
# registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\common\internet", "useonlinecontent", 0)
# # https://admx.help/?Category=Office2016&Policy=office16.Office.Microsoft.Policies.Windows::L_ServiceLevelOptions
# registry_set(HKEY_CURRENT_USER, r"software\policies\microsoft\office\16.0\common\internet", "serviceleveloptions", 0)
def uninstall_other_office_edition(edition_uninstallkey):
# Initializing variables
silent_uninstall_file_path = makepath(tempfile.gettempdir(), "remove_other_office.xml")
uninstall_configuration_xml_content = r"""<Configuration>
<Remove All="TRUE">
</Remove>
<Display Level="none" CompletionNotice="No" SuppressModal="Yes" AcceptEula="Yes" />
<Setting Id="SETUP_REBOOT" Value="Never" />
<Setting Id="REBOOT" Value="ReallySuppress"/>
</Configuration>
"""
# Modify XML
with open(silent_uninstall_file_path, "w") as xml_file:
xml_file.write(uninstall_configuration_xml_content)
# Uninstalling Office if needed
for to_uninstall in installed_softwares():
killalltasks(control.get_impacted_process_list())
if ("OfficeClickToRun.exe" in to_uninstall["uninstall_string"]) and not (edition_uninstallkey in to_uninstall["key"]):
print("Removing: %s (%s)" % (to_uninstall["name"], to_uninstall["version"]))
app_uninstall_cmd = to_uninstall["uninstall_string"] + " DisplayLevel=False"
run(app_uninstall_cmd)
wait_uninstallkey_absent(to_uninstall["key"])
def uninstall_mso2016_if_needed(uninstallkey):
# Initializing variables
silent_uninstall_file_path = makepath(tempfile.gettempdir(), "remove_o2016.xml")
uninstall_configuration_xml_content = r"""<Configuration>
<Remove All="TRUE">
</Remove>
<Display Level="none" CompletionNotice="No" SuppressModal="Yes" AcceptEula="Yes" />
<Setting Id="SETUP_REBOOT" Value="Never" />
<Setting Id="REBOOT" Value="ReallySuppress"/>
</Configuration>
"""
# Modify XML
with open(silent_uninstall_file_path, "w") as xml_file:
xml_file.write(uninstall_configuration_xml_content)
# Uninstalling Office if needed
for to_uninstall in installed_softwares(uninstallkey=uninstallkey):
print("Removing: %s (%s)" % (to_uninstall["name"], to_uninstall["version"]))
killalltasks(control.get_impacted_process_list())
if "OfficeClickToRun.exe" in to_uninstall["uninstall_string"]:
app_uninstall_cmd = to_uninstall["uninstall_string"] + " DisplayLevel=False"
run(app_uninstall_cmd)
wait_uninstallkey_absent(to_uninstall["key"])
else:
run(to_uninstall["uninstall_string"] + ' /config "%s"' % silent_uninstall_file_path)
wait_uninstallkey_absent(to_uninstall["key"])
def uninstall_mso2013_if_needed(uninstallkey):
# Initializing variables
silent_uninstall_file_path = makepath(tempfile.gettempdir(), "remove_o2013.xml")
uninstall_configuration_xml_content = r"""<Configuration>
<Remove All="TRUE">
</Remove>
<Display Level="none" CompletionNotice="No" SuppressModal="Yes" AcceptEula="Yes" />
<Setting Id="SETUP_REBOOT" Value="Never" />
<Setting Id="REBOOT" Value="ReallySuppress"/>
</Configuration>
"""
# Modify XML
with open(silent_uninstall_file_path, "w") as xml_file:
xml_file.write(uninstall_configuration_xml_content)
# Uninstalling Office if needed
for to_uninstall in installed_softwares(uninstallkey=uninstallkey):
print("Removing: %s (%s)" % (to_uninstall["name"], to_uninstall["version"]))
killalltasks(control.get_impacted_process_list())
run(to_uninstall["uninstall_string"] + ' /config "%s"' % silent_uninstall_file_path)
wait_uninstallkey_absent(to_uninstall["key"])
update_package.py
# -*- coding: utf-8 -*-
from setuphelpers import *
import waptguihelper
import webbrowser
import os
import sys
if "__file__" in locals():
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
from setupdevhelpers import *
def update_package():
# Declaring local variables
package_updated = False
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
extract_path = "extract"
# if not the first run it will use the last setup downloaded if you want to get an updated one you can remove setup.exe and relaunch the update package
if not isfile("setup.exe") and not params.get("running_as_luti"):
waptguihelper.message_dialog(
"You browser will open",
"Please download Office Deployment Tool by clicking the download button",
)
webbrowser.open("https://www.microsoft.com/download/details.aspx?id=49117")
waptguihelper.message_dialog("Waiting for download", "Click OK when the download is complete", waptguihelper.ID_OK)
# Copy to pkg
latest_bin = waptguihelper.filename_dialog(
"Please provide downloaded Office Deployment Tool to copy in this package",
makepath(user_home_directory, "Downloads"),
"",
"EXE Files|*.exe",
)
# Extract Office Deployment Tool
print("Copying: " + latest_bin)
run(rf'"{latest_bin}" /extract:"{extract_path}" /quiet"')
print("Extract Office Deployment Tool")
filecopyto(".\\extract\\setup.exe", basedir)
remove_file(latest_bin)
if isdir("extract"):
remove_tree("extract")
elif params.get("running_as_luti"):
download_url = "https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_17126-20132.exe"
latest_bin = download_url.split("/")[-1]
wget(download_url, latest_bin, proxies=proxies)
# Extract Office Deployment Tool
print("Copying: " + latest_bin)
run(rf'"{latest_bin}" /extract:"{extract_path}" /quiet"')
print("Extract Office Deployment Tool")
filecopyto(".\\extract\\setup.exe", basedir)
remove_file(latest_bin)
if isdir("extract"):
remove_tree("extract")
# if not the first run it will use the last XML used if you want to get a new one you can remove configuration.xml and relaunch the update package
if not isfile("configuration.xml"):
waptguihelper.message_dialog(
"Your browser will open",
"Please complete your deployment settings with the online Office Customization Tool and download it by clicking Export.\nNote that you can go back anytime on the online tool to edit your configuration (by clicking Import)",
)
webbrowser.open("https://config.office.com/deploymentsettings")
waptguihelper.message_dialog("Waiting for download", "Click OK when the XML is completed and downloaded", waptguihelper.ID_OK)
xml_configuration = waptguihelper.filename_dialog(
"Please select your XML configuration file", basedir, "configuration.xml", "XML Files|*.xml"
) # makepath(user_home_directory, "Downloads")
if not isfile("configuration.xml"):
filecopyto(
xml_configuration,
basedir + "\\configuration.xml",
)
# Asking to remove the last downloaded sources
if isdir("Office"):
if not params.get("running_as_luti"):
response = ask_message(control.package, "Do you want to remove the last downloaded sources?", 35)
if response == 6:
print("Removing last sources folder downloaded")
remove_tree("Office")
else:
print("Removing last sources folder downloaded")
remove_tree("Office")
else:
# Download Office with XML configuration
print("Downloading Office with XML configuration")
if windows_version() >= WindowsVersions.Windows10:
run("setup.exe /download configuration.xml", timeout=2400) # DisplayLevel=Full # not working
else:
error("MSO setup.exe can no longer be run on this OS")
# Getting version from source dir
version = glob.glob("Office/Data/**/")[0].split(os.sep)[1]
# 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()
# Getting Product ID and Language ID from configuration.xml parsing file
with open("configuration.xml", "r", encoding="utf8") as f:
for line in f:
if "OfficeClientEdition" in line:
architecture = line.split('"')[1]
print("OfficeClientEdition: %s" % architecture)
if architecture == "64":
architecture = "x64"
else:
architecture = "all"
if "Product ID" in line:
product_id = line.split('"')[1]
print("Product ID: %s" % product_id)
if "Language ID" in line:
language_id = line.split('"')[1]
print("Language ID: %s" % language_id)
break
if control.architecture != architecture:
control.architecture = architecture
control.save_control_to_wapt()
# Asking pkg infos if needed
if control.locale not in language_id and "-template" in control.package:
control.locale = waptguihelper.input_dialog(control.package, "You may wanna change locale to: %s" % language_id.split("-")[0], "all")
print("Changing locale to: %s in WAPT\\control" % control.locale)
control.save_control_to_wapt()
complete_control_categories(control)
complete_control_name(control, control.name, params.get("running_as_luti"))
complete_control_package(control, control.package, params.get("running_as_luti"), False)
complete_control_description(control, control.description, params.get("running_as_luti"), "update_package")
# changing uninstallkey:
new_lines = []
with open("setup.py", "r", encoding="utf8") as f:
for line in f.readlines():
if line.startswith("app_uninstallkey"):
line = f'app_uninstallkey = "{product_id} - {language_id}"\n'
print(f'uninstallkey in setup updated to app_uninstallkey = "{product_id} - {language_id}"\n')
new_lines.append(line)
with open("setup.py", "w", encoding="utf8", newline="\n") as f:
f.writelines(new_lines)
# Validating or not update-package-sources
return package_updated
d83f9da3d9edb83d49040c951a54863fced0277c702980b959ed253e2ddc5ad9 : setup.py
dde898d87e3132200004d932906d5b285a41ee1c355c7b33cd138e15bf776f82 : __pycache__/setupdevhelpers.cpython-38.pyc
13434b22be59b12bddcb8a521f6a555d9494dd45d9e986876c0159eda8c0d304 : configuration.xml
b62c0742caec6de84b562ab17275e093212457bfc5c1e3e2faef3c5a9f2f5ca9 : Office/Data/v64.cab
0e6493116e2b9e5946cd2f19b425bf66c1c153c14cb82f3cbd75a61e27743eea : Office/Data/16.0.14332.20637/stream.x64.fr-fr.dat
95135a7f9d2c70917be12beca84abf4c2fd8462b662819d948cbc9a722956515 : Office/Data/16.0.14332.20637/i641036.cab
06abb7dad499c2548c6e5d02896c9043abc0d7ba5e1584457b1e2a0d561189b3 : Office/Data/16.0.14332.20637/s641036.cab
428819b188d4285cf00991b71e3882822cc074a87b0e45e20bf827f541e41bf3 : Office/Data/16.0.14332.20637/stream.x64.x-none.dat.cat
4a264c71f9c6c0b41c63957bd1dc5943f6c59c6d8bd8864687ba8e21f3096e72 : Office/Data/16.0.14332.20637/i640.cab.cat
8ad6f9d364873dafb71545617199bac7ad514b60c5eb22f96a160ae2072b6c96 : Office/Data/16.0.14332.20637/i640.cab
a72ac785632847cbaa656865ef9f4f63b6c8b82b8d9a5a9b1270b1a0a1a37a6a : Office/Data/16.0.14332.20637/stream.x64.x-none.dat
3162e8a2614e827a0e57a98934e7891b4f0d32ddf3444e844d37bea75b2be219 : Office/Data/16.0.14332.20637/stream.x64.fr-fr.dat.cat
6af3e6edefa9563b78935e1bf893612fa9fd9f47047b9884d1bf6cb15014c543 : Office/Data/16.0.14332.20637/s640.cab
b62c0742caec6de84b562ab17275e093212457bfc5c1e3e2faef3c5a9f2f5ca9 : Office/Data/v64_16.0.14332.20637.cab
: Office
c29aed2447084268b2365fd8f9f51f752e0ad2dbb705e5bc6ac43f3de6acaee4 : update_package.py
2ac98141bf5b6777083f2bcbeab3ab034c01dff77718e108774575aaaa54a144 : WAPT/icon.png
a5a97261381e1d0ad46ee15916abec9c2631d0201f5cc50ceb0197a165a0bbbf : WAPT/certificate.crt
253f0ac3ab3e7dac7aa743a436b5f0cf5c85ec36c26125796490880642c6a82a : setupdevhelpers.py
efc812978ae37ff3fd683b72b787f25054ea9ec1d14c14ab803db10669d43a1e : luti.json
b67903f245e766687de7233133a68dfe4efdb9892e9f73f94adf69800d74f4d5 : setup.exe
6762cfa8a60104defe51c83e2c8856d72ef293ecf39f166ca3918a5bf5ce8789 : WAPT/control