tis-microsoft-office-365-business
16.0.17928.20216-16
Microsoft 365 Apps for business
152 downloads
See build result See VirusTotal scan
Description
- package : tis-microsoft-office-365-business
- name : Microsoft 365 Apps for business
- version : 16.0.17928.20216-16
- categories : Office
- maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ
- installed_size : 3207283762
- editor : Microsoft
- licence : proprietary_restricted,wapt_enterprise
- signature_date : 2024-10-11T22:17:38.000000
- size : 3.32 Go
- locale : en
- 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-365-business
version : 16.0.17928.20216-16
architecture : x64
section : base
priority : optional
name : Microsoft 365 Apps for business
categories : Office
maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ
description : Microsoft 365 Apps for business
depends :
conflicts : tis-microsoft-access-2016-runtime,tis-microsoft-office-2016,tis-microsoft-office-2013
maturity : PROD
locale : en
target_os : windows
min_wapt_version : 2.3
sources : https://www.microsoft.com/download/details.aspx?id=49117
installed_size : 3207283762
impacted_process : EXCEL,GROOVE,MSACCESS,MSPUB,ONENOTE,OUTLOOK,POWERPNT,WINWORD
description_fr :
description_pl :
description_de :
description_es :
description_pt :
description_it :
description_nl :
description_ru :
audit_schedule :
editor : Microsoft
keywords : office
licence : proprietary_restricted,wapt_enterprise
homepage : https://www.office.com/
package_uuid : 12f60aa8-18d5-49de-98ad-5e17eafdc15a
valid_from :
valid_until :
forced_install_on :
changelog :
min_os_version : 10.0
max_os_version :
icon_sha256sum : 4a5a8600858fd0640c4efd2541d542498cbe2def56c3eb8ec2aba64b689cecb5
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date : 2024-10-11T22:17:38.000000
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
signature : b2WoucgkcbLsF0i5XhNDr81nKxMbg8ErLlywM3ESF6JQykFZL3fspiVVLM0Ea4XWadKfoTk63rC9EPpaKRCbMc/BdkAvNsmH7qTQYZB1KoNsVcrTyebMLkW4T4aKVADHp0T6IqWuTE1yJE0QjsST0U8/e95OOshvNWGOpDnUf3hKY6yssCVaaFMosk0cdEYsWnjyNaQhl3a25Gwjq4gML7IgYbeiVpxJmBBv8oDe1jjwGn9ZvjjYyakiXK10Nepq8GJ5LaoD5/iwPlPzmVRBPrMmcjVmVemSnzpv2sFit0pPiTXzLisnsB93jSrD+VD0OdnXSp1EAfckYKYWURH33A==
Setup.py
# -*- coding: utf-8 -*-
##################################################
# This file is part of WAPT Enterprise
# All right reserved, (c) Tranquil IT Systems 2023
# For more information please refer to
# https://wapt.tranquil.it/store/licences.html
##################################################
from setuphelpers import *
import tempfile
"""
{
"key":"O365BusinessRetail - en-us",
"name":"Microsoft 365 Apps for business - en-us",
"version":"16.0.17126.20190",
"install_date":"",
"install_location":"C:\\Program Files\\Microsoft Office",
"uninstall_string":"\"C:\\Program Files\\Common Files\\Microsoft Shared\\ClickToRun\\OfficeClickToRun.exe\" scenario=install scenariosubtype=ARP sourcetype=None productstoremove=O365BusinessRetail.16_en-us_x-none culture=en-us version.16=16.0",
"publisher":"Microsoft Corporation",
"system_component":0,
"win64":true
},
{
"key":"O365BusinessRetail - en-us.proof",
"name":"Microsoft 365 Apps for business - en-us.proof",
"version":"16.0.17126.20190",
"install_date":"",
"install_location":"C:\\Program Files\\Microsoft Office",
"uninstall_string":"\"C:\\Program Files\\Common Files\\Microsoft Shared\\ClickToRun\\OfficeClickToRun.exe\" scenario=install scenariosubtype=ARP sourcetype=None productstoremove=O365BusinessRetail.16_en-us.proof_x-none culture=en-us.proof version.16=16.0",
"publisher":"Microsoft Corporation",
"system_component":0,
"win64":true
},
{
"key":"O365BusinessRetail - fr-fr",
"name":"Microsoft 365 Apps for business - fr-fr",
"version":"16.0.17126.20190",
"install_date":"",
"install_location":"C:\\Program Files\\Microsoft Office",
"uninstall_string":"\"C:\\Program Files\\Common Files\\Microsoft Shared\\ClickToRun\\OfficeClickToRun.exe\" scenario=install scenariosubtype=ARP sourcetype=None productstoremove=O365BusinessRetail.16_fr-fr_x-none culture=fr-fr version.16=16.0",
_x-none culture=fr-fr version.16=16.0",
"publisher":"Microsoft Corporation",
"system_component":0,
"win64":true
},
{
"key":"O365BusinessRetail - fr-fr.proof",
"name":"Microsoft 365 Apps for business - fr-fr.proof",
"version":"16.0.17126.20190",
"install_date":"",
"install_location":"C:\\Program Files\\Microsoft Office",
"uninstall_string":"\"C:\\Program Files\\Common Files\\Microsoft Shared\\ClickToRun\\OfficeClickToRun.exe\" scenario=install scenariosubtype=ARP sourcetype=None productstoremove=O365BusinessRetail.16_fr-fr.proof_x-none culture=fr-fr.proof version.16=16.0",
"publisher":"Microsoft Corporation",
"system_component":0,
"win64":true
}
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
<Product ID=""> list:
https://www.microsoft.com/microsoft-365/enterprise/microsoft-365-apps-for-enterprise-product
Microsoft 365 Apps for enterprise
O365ProPlusRetail
O365ProPlusEEANoTeamsRetail
https://www.microsoft.com/microsoft-365/business/microsoft-365-apps-for-business
Microsoft 365 Apps for business
O365BusinessRetail
O365BusinessEEANoTeamsRetail
"""
app_uninstallkey = "O365BusinessRetail - 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():
# Uninstalling the software
for to_uninstall in installed_softwares("O365BusinessRetail"):
if ".proof" in to_uninstall["name"]:
continue
print("Removing: %s (%s)" % (to_uninstall["name"], to_uninstall["version"]))
killalltasks(ensure_list(control.impacted_process))
run(uninstall_cmd(to_uninstall["key"])[0] + " DisplayLevel=False")
wait_uninstallkey_absent(to_uninstall["key"])
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)
killalltasks(control.get_impacted_process_list())
# Uninstalling Office if needed
for to_uninstall in installed_softwares():
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 -*-
##################################################
# This file is part of WAPT Enterprise
# All right reserved, (c) Tranquil IT Systems 2023
# For more information please refer to
# https://wapt.tranquil.it/store/licences.html
##################################################
from setuphelpers import *
import os
import sys
if "__file__" in locals():
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
from setupdevhelpers import *
import webbrowser
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"):
ask_message(
"You browser will open",
"Please download Office Deployment Tool by clicking the download button",
raise_error=True,
)
webbrowser.open("https://www.microsoft.com/download/details.aspx?id=49117")
ask_message("Waiting for download", "Click OK when the download is complete", 1, raise_error=True)
# Copy to pkg
latest_bin = ask_filename(
"Please provide downloaded Office Deployment Tool to copy in this package",
makepath(user_home_directory, "Downloads"),
"",
"EXE Files|*.exe",
raise_error=True,
)
# 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"):
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/88.0'
data = [ u for u in json.loads(wgets('https://www.microsoft.com/en-us/download/details.aspx?id=49117',user_agent=user_agent,proxies=proxies).split('<script>window.__DLCDetails__=',1)[1].split('</script>')[0])["dlcDetailsView"]['downloadFile'] if u['name'].endswith('.exe')][0]
download_url = data['url']
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"):
ask_message(
"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)",
raise_error=True,
)
webbrowser.open("https://config.office.com/deploymentsettings")
ask_message("Waiting for download", "Click OK when the XML is completed and downloaded", 1, raise_error=True)
xml_configuration = ask_filename(
"Please select your XML configuration file",
basedir,
"configuration.xml",
"XML Files|*.xml",
raise_error=True,
) # 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, raise_error=True)
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 = ask_input(control.package, "You may wanna change locale to: %s" % language_id.split("-")[0], "all", raise_error=False)
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
: Office
1d06d7f217cb4b6ca752e807069bed7844cb0640afef65b1529de58cdac82392 : Office/Data/16.0.17928.20216/a640_exp.cab
106089ddb3f35c69bee3dba34ffd9d220452f7ebd020ff1e5681e452cd04c00b : Office/Data/16.0.17928.20216/i640.cab
abac40f44cfacca922c297e23d4ff228039b466c8933f1e331fd188ab9ebd650 : Office/Data/16.0.17928.20216/i640.cab.cat
031f0c96b429f0c44fda53f5fe883d837e598cd5e1255121724a32ae8372d3da : Office/Data/16.0.17928.20216/i641036.cab
2285afeecda64e88e45f4f8f01c5de1f098566b2c872e1686bf9043921631796 : Office/Data/16.0.17928.20216/s640.cab
7dd53742a03e89ca2b989b3a7767dac120fb00a619adda9abc44c65f2612f43f : Office/Data/16.0.17928.20216/s641036.cab
5f07dba91948b17bd026e5aaea1249cdd498e519137e552861e28c06b5adb036 : Office/Data/16.0.17928.20216/stream.x64.fr-fr.dat
e2dcd464ec8105c9062d87c1b0eacca5c5f0f79f434854a1a3a6b12949a6854c : Office/Data/16.0.17928.20216/stream.x64.fr-fr.dat.cat
cf6193233446955845ef317b2dc4a7a443d43f2395eb347b704b5cc7817e8041 : Office/Data/16.0.17928.20216/stream.x64.x-none.dat
68abd5cd113413aa238945dfc7597a09e45e4189223a159bdfeaf1b25d290bda : Office/Data/16.0.17928.20216/stream.x64.x-none.dat.cat
8e40da19569f7cc55fe5d127d25d5cb59190ba39bf2e4ff1e954e7e5841b5fc6 : Office/Data/v64.cab
8e40da19569f7cc55fe5d127d25d5cb59190ba39bf2e4ff1e954e7e5841b5fc6 : Office/Data/v64_16.0.17928.20216.cab
38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
f645051413a64210c406a95837a7d2a18bf531e92af637eb3fda4d3284e693c6 : WAPT/control
4a5a8600858fd0640c4efd2541d542498cbe2def56c3eb8ec2aba64b689cecb5 : WAPT/icon.png
c1b5b245355d4565acdce983e48fd576eb9706ec5ffcc3cfac65b6f5fc2305ae : configuration.xml
4a08e8a227814136536a2abb2896c965d7aaae76f1f504882b1a5ac60b4f4283 : luti.json
d6f6fd3fe8eba8ccee31a270ba3fc6b6a7a1de58f4c9b45f40a9f322a84f8b1f : setup.exe
b13fe948ab9b9ceeeef29d14ef14080f2bcd023bafa43b2a73df5bec25400fe3 : setup.py
8437949b0c27bead9fb6a17ccc22dbd093eac91258ffa50bee5c3629c86cd7d7 : update_package.py