tis-adobereader
2024.4.20220-84
Adobe Acrobat is a family of application software and Web services developed by Adobe Inc. to view, create, manipulate, print and manage Portable Document Format (PDF) files
77716 downloads
See build result See VirusTotal scan
Description
- package : tis-adobereader
- name : Adobe Acrobat Reader
- version : 2024.4.20220-84
- categories : Office,Utilities
- maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ,Simon Fonteneau
- installed_size : 1284008424
- editor : Adobe Inc.
- licence : proprietary_free,wapt_public
- signature_date : 2024-10-30T14:07:42.000000
- size : 505.27 Mo
- locale : all
- target_os : windows
- impacted_process : Acrobat,AcrobatInfo,AcroBroker,AcroTextExtractor,AcroLayoutRecognizer,AcroCEF,AcroRd32,AcroRd32Info,AdobeCollabSync,RdrCEF,RdrServicesUpdater
- architecture : all
- Homepage : https://adobe.com/
- Depends :
- Conflicts :
control
package : tis-adobereader
version : 2024.4.20220-84
architecture : all
section : base
priority : optional
name : Adobe Acrobat Reader
categories : Office,Utilities
maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ,Simon Fonteneau
description : Adobe Acrobat is a family of application software and Web services developed by Adobe Inc. to view, create, manipulate, print and manage Portable Document Format (PDF) files
depends : tis-vcredist
conflicts : tis-adobe-acrobat-pro
maturity : PROD
locale : all
target_os : windows
min_wapt_version : 2.3
sources : https://get.adobe.com/reader/
installed_size : 1284008424
impacted_process : Acrobat,AcrobatInfo,AcroBroker,AcroTextExtractor,AcroLayoutRecognizer,AcroCEF,AcroRd32,AcroRd32Info,AdobeCollabSync,RdrCEF,RdrServicesUpdater
description_fr : Adobe Acrobat est une famille de logiciels d'application et de services web développés par Adobe Inc. pour visualiser, créer, manipuler, imprimer et gérer des fichiers Portable Document Format (PDF)
description_pl : Adobe Acrobat to rodzina aplikacji i usług internetowych opracowanych przez firmę Adobe Inc. do przeglądania, tworzenia, obróbki, drukowania i zarządzania plikami w formacie Portable Document Format (PDF)
description_de : Adobe Acrobat ist eine von Adobe Inc. entwickelte Familie von Anwendungssoftware und Webdiensten zum Anzeigen, Erstellen, Bearbeiten, Drucken und Verwalten von Dateien im Portable Document Format (PDF)
description_es : Adobe Acrobat es una familia de aplicaciones y servicios web desarrollados por Adobe Inc. para visualizar, crear, manipular, imprimir y gestionar archivos en formato PDF (Portable Document Format)
description_pt : O Adobe Acrobat é uma família de software de aplicação e serviços Web desenvolvidos pela Adobe Inc. para visualizar, criar, manipular, imprimir e gerir ficheiros Portable Document Format (PDF)
description_it : Adobe Acrobat è una famiglia di software applicativi e servizi Web sviluppati da Adobe Inc. per visualizzare, creare, manipolare, stampare e gestire file in formato PDF (Portable Document Format)
description_nl : Adobe Acrobat is een reeks applicatiesoftware en webservices ontwikkeld door Adobe Inc. voor het bekijken, maken, manipuleren, afdrukken en beheren van Portable Document Format (PDF)-bestanden
description_ru : Adobe Acrobat - это семейство прикладного программного обеспечения и веб-сервисов, разработанных компанией Adobe Inc. для просмотра, создания, манипулирования, печати и управления файлами Portable Document Format (PDF)
audit_schedule :
editor : Adobe Inc.
keywords : adobe,reader,acrobat,dc,pdf,portable,document,format,print,view
licence : proprietary_free,wapt_public
homepage : https://adobe.com/
package_uuid : a46c3276-7919-4f1c-90a9-3cd3531c9d8c
valid_from :
valid_until :
forced_install_on :
changelog : https://helpx.adobe.com/acrobat/release-note/release-notes-acrobat-reader.html
min_os_version : 6.1
max_os_version : 10.0
icon_sha256sum : e08ef23b951752553b93f621e169cbb918ded4eb56c504ed32f7da48d7e31b7c
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date : 2024-10-30T14:07:42.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 : JfMi+YbJvYDzlk0i+LYh1BQs2Iu0rmQ0geerDtxORx6vPEbHGV5a3S1TPElmUVYJAdmRQHErxsBmYJJzzkLQ/YuuxziZ+h/nZ4xzELcpVHHoveRlSoCdyx9MXKB9EcaKDkgrebpZpPLPUG+uy8DwbPVeVvbI6zgMtJ9ca1l64TO3yOg9D6Z3eIe4pBqL7gddvvAyI8MGnNogdPckLqW//JqKxHlEQTpYHNL561f773luErpL8YChYGiIXf52HxgSMiBaAw6F80a6szn8j6y/7O0xRrgi+qpAXlWroQwZnhHq8LNU/gFwV9N6fp0KO4k0oYfvoHWO/4Ti6UJB/DSmgg==
Setup.py
# -*- coding: utf-8 -*-
from setuphelpers import *
import os
import chardet
import time
r"""
https://silentinstallhq.com/adobe-reader-dc-silent-install-how-to-guide/
AcroRdrDC2300320215_en_US.exe /sAll /rs /msi EULA_ACCEPT=YES /L*V "%WINDIR%\Temp\AdobeReader-Install.log"
MsiExec.exe /i "%~dp0AcroRead.msi" PATCH="%~dp0AcroRdrDCUpd2300320215.msp" /qn /L*V "%WINDIR%\Temp\AdobeReader-Install.log"
https://www.adobe.com/devnet-docs/acrobatetk/tools/DesktopDeployment/cmdline.html
Installation 9.0 & later ENABLE_CACHE_FILES 1 (the default) enables setup file caching of the installer files on the local system. The opposite of DISABLE_CACHE.
Installation 10.0 & later DISABLE_CACHE 1 disables setup file caching. The opposite of ENABLE_CACHE_FILES.
"C:\Windows\system32\msiexec.exe" /i {AC76BA86-7AD7-FFFF-7B44-AC0F074E4100} /L*V "C:\Windows\Temp\AdobeReader-Install.log DISABLE_CACHE=1 REBOOT="ReallySuppress" PATCH="C:\Program Files (x86)\Common Files\Adobe\Acrobat\Setup\{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}\RDC\AcroRdrDCUpd2300320215_MUI.msp" /qn
"C:\Program Files (x86)\Common Files\Adobe\Acrobat\Setup\{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}\RDC\setup.exe" /sAll /rs /msi /L*V "C:\Windows\Temp\AdobeReader-Install.log DISABLE_CACHE=1
"C:\Program Files (x86)\Common Files\Adobe\Acrobat\Setup\{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}\setup.exe" /sAll /rs /msi DISABLE_CACHE=1
"C:\Windows\system32\msiexec.exe" /i "C:\Program Files (x86)\Common Files\Adobe\Acrobat\Setup\{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}\AcroRead.msi" TRANSFORMS="" DISABLE_CACHE=1 REBOOT="ReallySuppress" PATCH="C:\Program Files (x86)\Common Files\Adobe\Acrobat\Setup\{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}\AcroRdrDCUpd2300320215_MUI.msp" /qn
some keys examples: https://github.com/bmrf/standalone_scripts/blob/master/tron_guid_whitelist.txt
# 32bit app
{
"key":"{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}",
"name":"Adobe Acrobat Reader MUI",
"version":"23.003.20215",
"install_date":"2023-07-04 00:00:00",
"install_location":"C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\",
"uninstall_string":"MsiExec.exe /I{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}",
"publisher":"Adobe Systems Incorporated",
"system_component":0,
"win64":false
}
# 64bit app
{
"key":"{AC76BA86-1033-FF00-7760-BC15014EA700}",
"name":"Adobe Acrobat (64-bit)",
"version":"23.003.20215",
"install_date":"2023-07-04 00:00:00",
"install_location":"C:\\Program Files\\Adobe\\Acrobat DC\\",
"uninstall_string":"MsiExec.exe /I{AC76BA86-1033-FF00-7760-BC15014EA700}",
"publisher":"Adobe",
"system_component":0,
"win64":true
}
"""
app_scheduled_tasks = ["Adobe Acrobat Update Task"]
app_services = ["AdobeARMservice"]
def install():
software_version = control.get_software_version().split("20", 1)[-1] # correcting version
log_path = makepath(r"C:\Windows\Temp", "AdobeReader-Install.log")
upgrade_log_path = makepath(r"C:\Windows\Temp", "AdobeReader-Upgrade.log")
silentflags = f'/sAll /rs /msi EULA_ACCEPT=YES /L*V "{log_path}"'
if ensure_list(control.architecture)[0] == "x64":
app_uninstallkey = "{AC76BA86-1033-FF00-7760-BC15014EA700}"
else:
app_uninstallkey = "{AC76BA86-7AD7-FFFF-7B44-AC0F074E4100}"
# Uninstalling old products and app if install is forced
for to_uninstall in installed_softwares("Adobe Acrobat "):
do_uninstall = False
# *7B44-AC0F074E4100} => Adobe Acrobat Reader DC*
# *7760-BC15014EA700} => Adobe Acrobat (64-bit)
# *7760-BC15014EA700} => Adobe Acrobat DC (64-bit) => Pro version ?
if not "Pro" in to_uninstall["name"] or not "MUI" in to_uninstall["name"]:
if to_uninstall["key"].endswith("7B44-AC0F074E4100}") or to_uninstall["key"].endswith("7760-BC15014EA700}"):
if not "Adobe Acrobat DC (64-bit)" in to_uninstall["name"] and not "Adobe Acrobat (64-bit)" in to_uninstall["name"]:
do_uninstall = True
print(
f'INFO: {to_uninstall["name"]} ({to_uninstall["version"]}) may be a Pro version, in which case the installation will fail, but you can still remove it with a force install.'
)
if force:
print(f'DANGER: {to_uninstall["name"]} may be a Pro version and will be remove because the install is forced.')
do_uninstall = True
if do_uninstall:
print("Removing: %s (%s)" % (to_uninstall["name"], to_uninstall["version"]))
killalltasks(ensure_list(control.impacted_process))
run(uninstall_cmd(to_uninstall["key"]))
wait_uninstallkey_absent(to_uninstall["key"])
if Version(to_uninstall["version"]) == Version(control.get_software_version()) and iswin64() and not to_uninstall["win64"]:
print(
f'INFO: {to_uninstall["name"]} (32-bit) version is installed and up-to-date. You can force-install this package to migrate to the (64-bit) version after removing the "architecture : all" package from your repo.' # or changing his "max_os_version" to "10.0"
)
# else:
# print(
# f'INFO: {to_uninstall["name"]} version is installed. You can force-install this package to migrate to the (32-bit) version (not recommended) after removing the "architecture : x64" package from your repo and changing "max_os_version" to "". '
# )
# Removing application desktop shortcut if allowed
if params.get("remove_desktop_shortcuts"):
silentflags += " DISABLEDESKTOPSHORTCUT=1"
remove_desktop_shortcut("Acrobat Reader DC")
remove_desktop_shortcut("Adobe Acrobat")
# Installing software
bin_name = glob.glob("AcroRdrDC*.exe")[0]
try:
install_exe_if_needed(
bin_name,
silentflags=silentflags,
key=app_uninstallkey,
# min_version="24.001.20615",
min_version=software_version,
timeout=1200,
)
except Exception as e:
print(e)
with open(log_path, "r", encoding=detect_file_encoding(log_path)) as f:
log_content = f.read()
error(log_content)
# # Upgrading software
# bin_name = glob.glob("AcroRdrDC*.msp")[0]
# if need_install(app_uninstallkey, min_version=software_version):
# print(r"Installing: %s (%s)" % (bin_name, software_version))
# try:
# run(f'msiexec.exe /p "{bin_name}" /norestart /quiet ALLUSERS=1 EULA_ACCEPT=YES /L*V "{upgrade_log_path}"', timeout=1200)
# except Exception as e:
# print(e)
# with open(upgrade_log_path, "r", encoding=detect_file_encoding(upgrade_log_path)) as f:
# log_content = f.read()
# error(log_content)
# else:
# print("MSP setup %s already installed. Skipping" % bin_name)
# if need_install(app_uninstallkey, min_version=software_version):
# error("%s upgrade failed." % bin_name)
# Disabling application scheduled tasks
for task_name in app_scheduled_tasks:
if task_exists(task_name):
try:
disable_task(task_name)
except:
print(f"Unable to disable the task_name: {task_name}")
# Changing default start mode of the application services
for service_name in app_services:
set_service_start_mode(service_name, "Disabled")
def uninstall():
time.sleep(30)
# 64bit app
editor_dir = makepath(programfiles, "Adobe")
app_dir = makepath(editor_dir, "Acrobat DC", "Acrobat")
if isdir(app_dir):
remove_tree(app_dir)
if remove_empty_directories(editor_dir):
remove_tree(editor_dir)
# 32bit app
editor_dir = makepath(programfiles32, "Adobe")
app_dir = makepath(editor_dir, "Acrobat Reader DC", "Reader")
if isdir(app_dir):
remove_tree(app_dir)
if remove_empty_directories(editor_dir):
remove_tree(editor_dir)
def remove_empty_directories(root_directory):
if os.path.exists(root_directory):
for dirpath, dirnames, filenames in os.walk(root_directory, topdown=False):
if not any(os.scandir(dirpath)):
os.rmdir(dirpath)
print(f"Removed empty directory: {dirpath}")
def detect_file_encoding(file_path):
"""Detect the encoding of a file.
Args:
file_path (str): The path to the file to be analyzed.
Returns:
str: The detected character encoding of the file.
>>> detect_file_encoding(file_path)
'UTF-8-SIG'
"""
with open(file_path, "rb") as file:
raw_data = file.read()
result = chardet.detect(raw_data)
return result["encoding"]
update_package.py
# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *
from waptutils import get_sha256
"""
https://get.adobe.com/reader/enterprise/
https://get.adobe.com/reader/download?os=Windows+11&name=Reader+DC+2023.003.20215+MUI+for+Windows-64bit&lang=mui&nativeOs=Windows+10&accepted=&declined=&preInstalled=&site=enterprise
https://get.adobe.com/reader/download?os=Windows+7&name=Reader+DC+2023.003.20215+MUI+for+Windows-32bit&lang=mui&nativeOs=Windows+10&accepted=&declined=&preInstalled=&site=enterprise
https://ardownload2.adobe.com/pub/adobe/acrobat/win/AcrobatDC/2300320215/AcroRdrDCx642300320215_MUI.exe
https://ardownload2.adobe.com/pub/adobe/reader/win/AcrobatDC/2300320215/AcroRdrDC2300320215_MUI.exe
https://silentinstallhq.com/adobe-reader-dc-silent-install-how-to-guide/
Enter the following command to extract the MSI:
AcroRdrDC2300320215_en_US.exe -sfx_o"C:\Downloads\ReaderDC" -sfx_ne
"""
def update_package():
# Declaring local variables
package_updated = False
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
update_dict = {
"bin_contains": {
"windows": "_MUI.msp",
"mac": "_MUI.dmg",
},
"bin_name_to_substitute": {
"windows-all": "AcroRdrDC%s_MUI.exe",
"windows-x64": "AcroRdrDCx64%s_MUI.exe",
"mac-all": "AcroRdrSCADC%s_MUI.dmg",
},
"name_api": {
"windows-all":r"Windows%207",
"windows-x64": r"Windows%2011",
"mac-all": "Mac%20OS%2010.15.0",
},
}
# # Getting base installer
# if control.target_os == "windows":
# if iswin64():
# # https://ardownload2.adobe.com/pub/adobe/acrobat/win/AcrobatDC/2400120615/AcroRdrDCx642400120615_MUI.exe
# binaries_dict = {"AcroRdrDCx642400120615_MUI.exe": "8820bff54abd9c636bbc7fb11a5ed338de5dc72222055d22983a7b86388a3f1d"}
# else:
# # https://ardownload2.adobe.com/pub/adobe/reader/win/AcrobatDC/2400120615/AcroRdrDC2400120615_MUI.exe
# binaries_dict = {"AcroRdrDC2400120615_MUI.exe": "c34f14e5e1c5ffae7b0422e92cb907d72b1b243b7a0c085e55c1601b6838f1c1"}
# for bin_name in binaries_dict:
# # http is ok since we are verifying sha256
# download_url = "http://srvtemplates.ad.tranquil.it/binary_cache/" + (bin_name)
# sha256 = binaries_dict[bin_name]
# if isfile(bin_name):
# if get_sha256(bin_name) != sha256:
# remove_file(bin_name)
# print("Download URL is: %s" % download_url)
# if not isfile(bin_name):
# print("Downloading: %s" % bin_name)
# wget(download_url, bin_name, sha256=sha256, proxies=proxies)
# else:
# print("Binary is present: %s" % bin_name)
url = "https://helpx.adobe.com/acrobat/release-note/release-notes-acrobat-reader.html"
web_version = "0"
# Getting latest version from official sources
found = False
print("URL used is: %s" % url)
for release in bs_find_all(url, "a", "disablelinktracking", "false", proxies=proxies):
if not release.text.startswith("DC "):
continue
for release_url in bs_find_all(release["href"], "a", "class", "reference external", proxies=proxies):
if release_url["href"].endswith(update_dict["bin_contains"][control.target_os]):
latest_bin = release_url["href"].split("/")[-1]
if control.architecture == "x64" and not "x64" in latest_bin:
continue
download_url_part = release_url["href"].rsplit("/", 1)[0]
version_adobe = download_url_part.split("/")[-1].lower()
web_version = release.text.split("(")[-1].split(")")[0].lower()
if "x" in web_version:
count_x = web_version.count("x")
missing_digits = version_adobe[-count_x:]
web_version = web_version.split("x", 1)[0] + missing_digits
latest_bin = update_dict["bin_name_to_substitute"][f"{control.target_os}-{control.architecture}"] % version_adobe
download_url = download_url_part + "/" + latest_bin
if requests.head(download_url, proxies=proxies).status_code == 404:
web_version = "0"
continue
found = True
break
if found:
break
# Downloading latest binaries
Os = update_dict["name_api"][f"{control.target_os}-{control.architecture}"]
data = requests.get('https://rdc.adobe.io/reader/products?lang=mui&os=' + Os +'&preInstalled=0&country=FR&api_key=dc-get-adobereader-cdn',proxies=proxies)
datajson = json.loads(data.content)
namear = datajson['products']['reader'][0]['displayName'].replace(' ','%20')
versionofficial = datajson['products']['reader'][0]['version']
version = "20%s" % web_version
if Version(versionofficial) > Version(web_version):
version = "20%s" % versionofficial
url = r"https://rdc.adobe.io/reader/downloadUrl?name=" + namear + r"&nativeOs=&os=" + Os + "&site=enterprise&lang=mui&country=FR&api_key=dc-get-adobereader-cdn"
data = requests.get(url,proxies=proxies)
datajson = json.loads(data.content)
download_url = datajson['downloadURL']
latest_bin = download_url.split('/')[-1]
print("Latest %s version is: %s" % (control.name, 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)
# Deleting outdated binaries
for f in glob.glob('*_MUI.*'):
if f != latest_bin:
remove_file(f)
# 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 or not update-package-sources
return package_updated
# # Changing version of the package and validating update-package-sources
# return complete_control_version(control, version)
1052e78da068501ba0bf8b14123a3afd4fbd3ee916c5287a0f78efcd1e0597fd : AcroRdrDC2400420220_MUI.exe
38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
7ae36379a9353173d23b27e7877095a9eed6f00c227078ea46fa46e10cc9460c : WAPT/changelog.txt
46e1c4fb7849591fdf0ab64c309b4114e417e75ece45d220c4fa58415f95ae63 : WAPT/control
e08ef23b951752553b93f621e169cbb918ded4eb56c504ed32f7da48d7e31b7c : WAPT/icon.png
6a348cdc8b1cf701366b0cb26cd532ab0a52e2191026e3a491d3d27d55b84209 : luti.json
5253c309dbc8879e5c5ec28775aa35cd53ab28841cc7eeb075358403ebcdb62a : setup.py
697b0406f59b5b0982f7007324e2ede3c817eb14c1fd343ff75e762718df4be6 : update_package.py
Changelog
84
===
- No longer use a base configuration, instead you should import and edit the package: tis-adobe-acrobat-config-template
- Logging file are now printed in WAPT Console when crashing.
- Uninstall code reduced.
- Fix update_package()
80
===
- Printing more information about Pro version workaround
79
===
- Major code improvement
- Switching to EXE (containing msi and msp file)
- Now printing what is happening in install
- Now uninstalling the software if install is forced (to fix: "Setup has detected that you already have a more functional product installed. Setup will now terminate")
- Windows 7 is still maintained as 32bit installer
- Code is unique for package architecture "all" and "x64", even if 64bit app is called Adobe Acrobat and 32bit app is called Acrobat Reader
- Disabling WelcomeScreen
- Disabling some pop-ups
- Disabling automatic updates, telemetry and intrusive services
- Zoom 100% by default
- Manipulating registry with dicts to handle multi architecture pathes
- Avoiding AdobeCollabSync.exe to run on startup
- Avoiding uninstallation on every installs
- We need further tests to determine if "Adobe Acrobat DC (64-bit)" is the only Pro version