Adobe Product Codes
While digging into the Adobe install process, I needed to be able to translate from “AdobeCodes” like “{27B54140-8302-4B5D-83DD-AEE4B18BC7A4}” to product names like “Adobe Encore CS4″ and the installer payload name like “AdobeEncore4All”.
I ended up writing a Python script to crawl through the payloads directory of Adobe install media to generate a table. The script is below, and called like:
python adobeparser.py /path/to/payloads
It’s probably not generally useful, though I include it just for completeness…
#!/usr/bin/env python
# encoding: utf-8
"""
adobeparser.py
Created by Greg Neagle on 2009-10-07.
"""
import sys
import os
import optparse
from xml.dom import minidom
def parseAdobeProxyXML(filename):
payloadinfo = {}
dom = minidom.parse(filename)
installer_properties = dom.getElementsByTagName("InstallerProperties")
if installer_properties:
properties = installer_properties[0].getElementsByTagName("Property")
if properties:
for prop in properties:
if 'name' in prop.attributes.keys():
propertyname = prop.attributes['name'].value
propertyvalue = ""
for node in prop.childNodes:
propertyvalue += node.nodeValue
payloadinfo[propertyname] = propertyvalue
return payloadinfo
def analyzePayloads(dirname):
payloads = []
dirname = dirname.rstrip("/")
if dirname.endswith('payloads'):
for payloaditem in os.listdir(dirname):
payloaditempath = os.path.join(dirname, payloaditem)
if os.path.isdir(payloaditempath):
for item in os.listdir(payloaditempath):
if item.endswith(".proxy.xml"):
proxyxmlfile = os.path.join(payloaditempath, item)
payloadinfo = parseAdobeProxyXML(proxyxmlfile)
payloadinfo['ComponentName'] = payloaditem
if payloadinfo:
payloads.append(payloadinfo)
break
return payloads
def main():
p = optparse.OptionParser()
options, arguments = p.parse_args()
if arguments:
payloads = analyzePayloads(arguments[0])
print "Adobe Code\tName\tVersion"
for payload in payloads:
print "%s\t%s\t%s\t%s" % (payload['AdobeCode'], payload['ProductName'], payload['ProductVersion'], payload['ComponentName'])
if __name__ == '__main__':
main()
I ran this script against the payloads folder on the Adobe CS4 Master Collection installation media. I then sorted the output by AdobeCode and added a header line, and here is the result: a tab-delimited list of AdobeCodes, ProductNames, ProductVersions, and PayloadNames.
I hope this list is useful to someone other than me! Combine this with the info here and you can get a pretty good idea of everything that’s installed.