One of the testing coverage that we have in hotfix testing is install or upgrade testing. When the hotfix is delivered in an MSI patch i.e. an msp file, we have to make sure that the hotfix is properly installed - i.e. modified files, registry, services and drivers are properly updated; and also has to make sure that the hotfix, patched the right application.
 |
Windows 2003 Add/Remove program app/patch entry |
In WinXP or Win2003, the patches of an installed application are listed below it on the Add/Remove program utility (see left pix). In the figure, we can visually confirm that there are 2 patches installed to the SharePoint Services 3.0.
In Vista/Win2008 or later, all the applications and patches were now shown in the same hierarchy
 |
Windows 2008 Program & Features panel |
level; and it's hard to visually know which hotfix is a patch of which application. And considering that there are also hidden patches (those not visible in the Add/Remove program utility), there's a need for such a tool to list down all patches - visible or hidden.
Synfo was created to answer this need. This tool primarily make use of the Windows.Installer object to list all applications and patches, and also retrieve additional information from the registry to get the list of all installed components. Using the component's GUIDs, this tool will recreate the tree hierarchy structure of the application and its patches.
Other that the application and patches info, I also added the installed services info and system variables set in the system. This tool will then create a snapshot of these info in an xml file format as shown in the sample below:
 |
Synfo XML output file |
The root node is named as
synfo and under it are 3 types of elements:
info,
services and
products.
The
info node will contain the system info where this utility was executed and also contains one
env.vars subnodes which contains all the system variables set in the system
The
services node, contains all the services info (node labeled as
svc) with their id i.e. the service unique name. Each svc node contains all the attribute name and value pairs like service
DisplayName and
State.
The
products node on the other hand contains all the applications (or products) installed in system which are being identified uniquely by a GUID. The product property values as well as the additional registry (
reg.info) are also exported. If the product has patches installed in the system, these components will be listed under the
patches child-node of that product. The
count attribute shows the number of patches installed for that product. With this information at hand, it would easy to verify if the hotfix-under-test patched the right product.
This
synfo tool does not only take a snapshot of the these info. It can also make a diff comparison of 2 synfo xml files. By comparing or getting the difference between the 2 snapshots, we would be able to verify what objects or properties changed, deleted or added! The figure below is a portion of the compare result xml file. Here it shows that there are 5 modified products. One of the modified product has 1 added patch and 1 removed patch. For modified values, the
oldValue and the
newValue will be shown side by side.
The tool could also add the xml stylesheet filepath to the output file if specified in the execution parameter.
 |
Synfo compare result file |
Tool Information:
requirements: .Net runtime 2.0 or later is required.
download link:
synfo.zip
Usage:
to dump the system info, run with no parameters.
$>synfo.exe [enter]
to compare the synfo files:
$>synfo.exe referenceFile [compareFile] [xslPath]
referenceFile - the base synfo xml file. required
[compareFile] - the synfo xml file to compare. if not specified, the current system state is used.
[xslFilePath] - path to the result xml stylesheet. optional
Disclaimer:
This tool is provided 'as is' without warranty of any kind, either expressed or implied and such software is to be used at your own risk.