You may have heard of Windows 7 Software Client Logo.  Did you know that it has an automated test? Did you know the toolkit was designed to be scripted so you can add it to your testing process? In this post, I’ll walk though how you might want to leverage the logo toolkit in your development or testing process to find potential compatibility issues.

What’s Logo?

Windows Logo has been around since Windows 2000. There is a hardware and a software logo and it changes with each release of the OS. Basically, it is a set of requirements that all “well behaved” applications should meet. There is a set of tests that your application needs to pass to prove that it meets the requirements. If you pass the tests, you get the logo to put on your product. The good news is that the Windows 7 client logo is a self test. If you pass, it’s free to submit and get the logo.

That’s Great but I Just Want to Leverage the Tests…

There may be several reasons why you are interested in the logo -- marketing, partner points, your boss told you to do it, etc. Or maybe, you are just looking for ways to test your application for a base level of Windows 7 compatibility. What ever the reason, the goal of logo is to increase the quality of applications. I think one of the best improvements to logo is to have a tool to do the testing for you.

Using the Toolkit

Everything you need for logo including the toolkit is on Connect. After you install the toolkit, you can run it interactively from the Start menu (Windows 7 Client Software Logo Toolkit shortcut). This will launch a wizard that walks you through adding and removing your application while the toolkit monitors the system for changes. At the end of the wizard, you can generate a report that looks like this:

image

The report outlines what tests you passed or failed with details on any issues found with respect to the requirements.

Automating the Toolkit Tests

The toolkit process can be accomplished via the command line. Therefore, you can script the process for your application. By scripting the logo test, you could put it in your development or testing process to find issues. Since the generated report is XML, you can parse it to generate reports or populate tracking databases, etc. We use the toolkit in our readiness lab process to look for issues before a customer visits the lab (see this post about our Win 7 compatibility checklist).

You can get the command line usage information by running “C:\Program Files\Microsoft Windows Software Logo Kit”\wslk.exe /?. The Users Guide document in the toolkit download also outlines using the toolkit via the command line.

For example, here’s a sample batch file I created to test a 32-bit based MSI installer and application:

rem --- Runs Windows 7 Software Logo for a 32-bit msi and application.
rem --- Run in same directory as MSI. Creates Logo.xml and outputs failures and warnings.
rem --- Usage: AutoLogo.bat <MSI setup file> e.g. >AutoLogo.bat MySetup.msi

rem --- Reset the toolkit
"c:\Program Files\Microsoft Windows Software Logo Kit"\wslk.exe /reset

rem --- Pre-install for 32-bit
"c:\Program Files\Microsoft Windows Software Logo Kit\"wslk.exe /preinstall /setupexepath . /32bit

rem --- Install application quietly and run post install
msiexec /i %1 /q
"c:\Program Files\Microsoft Windows Software Logo Kit"\wslk.exe /postinstall

rem --- Run pre-uninstall and uninstall quietly
"c:\Program Files\Microsoft Windows Software Logo Kit"\wslk.exe /preuninstall
msiexec /uninstall %1 /q

rem --- Run post uninstall
"c:\Program Files\Microsoft Windows Software Logo Kit"\wslk.exe /postuninstall

rem --- clean up old logo report file and create a new Logo.xml report file
del Logo.xml
"c:\Program Files\Microsoft Windows Software Logo Kit"\wslk.exe /createreport Logo.xml

rem --- Execute the Powershell script to output failures and warnings
PowerShell -ExecutionPolicy Unrestricted -File LogoResult.ps1

The batch file accepts the MSI file name as the first argument on the command line. It will reset the toolkit, execute the toolkit process, install/uninstall the application, generate the report, and execute a PowerShell script to report only “non-passing” tests.

Here’s the PowerShell script (LogoResult.ps1) to parse the XML report to output failures and warnings:

[xml]$LogoRpt = get-content .\Logo.xml
Write-Host "----------------------------------------------------" -ForegroundColor green
Write-Host "OVERALL RESULT: " $LogoRpt.REPORT.OVERALL_RESULT -ForegroundColor black -BackgroundColor white

foreach( $result in $LogoRpt.REPORT.REQUIREMENTS.REQUIREMENT)
{
    foreach( $test in $result.TEST)
    {
        if ($test.RESULT -ne "PASS")
        {
            Write-Host "----------------------------------------------------" -ForegroundColor green
            write-Host "TEST:" $test.NAME
            Write-Host "RESULT:" $test.RESULT
            foreach( $msg in $test.MESSAGES.MESSAGE)
            {
                Write-Host $msg.TEXT
            }
        }
    }
}

Here’s the sample output:

----------------------------------------------------
OVERALL RESULT:  WARNING
----------------------------------------------------
TEST: Write appropriate Add/Remove Program values
RESULT: WARNING
Value InstallLocation missing or invalid for program OEM Ready Demo.
----------------------------------------------------
TEST: Install to Program Files
RESULT: WARNING
Program OEM Ready Demo fails due to missing install location.
----------------------------------------------------
TEST: Install signed driver and executable files
RESULT: WARNING
Non-driver file c:\program files (x86)\microsoft\oem ready demo\oemreadydemo.exe does not have a valid signature, either embedded or via a catalog file.
----------------------------------------------------
TEST: Perform version checking properly at runtime
RESULT: IN_PROGRESS

----------------------------------------------------
TEST: Don't block reboot
RESULT: WARNING

----------------------------------------------------
TEST: Multi User registry check
RESULT: WARNING
Registry key [HKEY_CURRENT_USER\Control Panel\Personalization\Desktop Slideshow][HKEY_CURRENT_USER\Control Panel\Personalization\Desktop Slideshow] Interval=DWord:1800000[HKEY_CURRENT_USER\Control Pan
el\Personalization\Desktop Slideshow] LastTickHigh=DWord:30079071[HKEY_CURRENT_USER\Control Panel\Personalization\Desktop Slideshow] LastTickLow=DWord:1766643285[HKEY_CURRENT_USER\Control Panel\Person
alization\Desktop Slideshow] Shuffle=DWord:0 was modified during installion.
----------------------------------------------------
TEST: Multi User session test
RESULT: WARNING
Application fails due to no shortcuts.
----------------------------------------------------
TEST: Multi User Check Logs
RESULT: WARNING

Since the report is XML based, we could do just about anything with the information. You could generate reports, assign bugs to developers, send e-mails, etc.  If you do plan on getting the logo, the earlier you find issues in your development or testing process, the more time you will have to fix them.

I hope this gives you some ideas on how you might leverage these test to help find issues in your application. Who knows?… You might be eligible for logo and can submit to get the logo “sticker” for your application.