Subscribe to Windows IT Pro

 

Get Newsletters

  • Get the Latest News
  • Product Updates
  • Helpful Tricks
  • Productivity Tips

Subscribe Now!

December 26, 2007 12:00 AM

How to Get Information About Installed Applications Without Using WMI

Windows IT Pro
InstantDoc ID #97604
Rating: (1)
Downloads
97604.zip

Executive Summary:
The standard way to find information about installed applications is to use Windows Management Instrumentation's Win32_Product class, but sometimes that's not possible. For example, a known bug causes Win32_Product inquiries to fail on some Windows Vista systems, and there won't be a fix until Vista SP1 is out. Here are three workarounds you can use to get the same information that Windows Management Instrumentation's Win32_Product class provides on Vista or any other modern Windows OS.

Some Windows Vista systems have Windows Management Instrumentation (WMI) queries of the Win32_Product class fail and provide the less-than-helpful message Generic failure. Repairing WMI typically doesn’t solve the problem. In a Usenet group discussion, Microsoft insider Jeffrey Snover confirms that this is a known bug scheduled for a fix in Vista’s SP1 (see groups.google.com/group/microsoft .public.windows.powershell/browse_thread/thread/a3313bfdeaaca2af/ 66061dcb9ea6578a).

In one post in the discussion, Keith Hill mentions that you can get the same information that the Win32_ Product class provides directly from the registry. The Win32_Product items are all in subkeys under the HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\Windows\Current-Version\Uninstall key. However, Hill doesn’t mention how to extract the data. Depending on what tools you’re comfortable with using and what you need to do, there are a few options for quickly extracting the data. These options aren’t limited to Vista. You can use them on other Windows OSs if you’re having problems with the WMI subsystem.

If you want to save the data in a file for later use, a simple approach is to run regedit, navigate to the HKEY_ LOCAL_MACHINE\SOFTWARE Microsoft\Windows\CurrentVersion Uninstall key, right-click that key, and select Export from the context menu. You can then save the data in a .reg file.

If you want to display the data, you can use command-line tools. One such tool is reg.exe. After opening a command-shell window, run the command

reg query HKLM\SOFTWARE\
Microsoft\Windows\CurrentVersion\
Uninstall /s

(Although this command appears on several lines here, you would enter it on one line. The same holds true for the other multiline commands presented here.)

Another command-line tool you can use is Windows PowerShell. In PowerShell, the simplest way to display the data is to use the Get-ChildItem cmdlet (which has the alias of gci), then pipe its results to the Get-Item- Property cmdlet. (Get-ChildItem doesn’t retrieve information about the registry values contained within subkeys; it only lists the subkeys’ names.) So, the command that you’d enter in the PowerShell window would be

gci “HKLM:\SOFTWARE\Microsoft\
Windows\CurrentVersion\Uninstall” |
ForEach-Object{Get-ItemProperty
$_.PSPath}

You can filter the output of this command to make it more readable by piping the output to the Select-Object cmdlet, putting the names of the properties you’re interested in as arguments. For example, here’s how I use Select- Object to get some of the more useful information from the registry keys:

Get-ChildItem HKLM:\SOFTWARE\
Microsoft\Windows\CurrentVersion\
Uninstall | ForEach-Object{
Get-ItemProperty $_.PSPath} |
Select-Object DisplayVersion,
InstallDate,ModifyPath,Publisher,
UninstallString,Language,
DisplayName

On the Windows IT Pro Web site, you can download a couple of scripts—GetApplicationUninstall .cmd and Get-ApplicationUninstall .ps1—that automate getting the product information from the Uninstall key. (Go to www.windowsitpro.com/Windows/Article/ArticleID/97604/97604.html and click the Download the Code Here button near the top of the page.) You can run GetApplication- Uninstall.cmd, which uses reg.exe, from a command prompt to display the output from the local machine. If you add the name of a remote machine to the command line, the data will be returned for that remote system. Get-ApplicationUninstall.ps1 is a native PowerShell script that runs only against the local system.

Admittedly, all three workarounds aren’t ideal because they’re just data dumps. However, they at least provide a way to get information about a machine’s installed applications when you can’t use WMI.

See Associated Figure

Related Content:

ARTICLE TOOLS

Comments
    There are no comments to display. Be the first one!
You must log on before posting a comment.

Are you a new visitor? Register Here

advertisement

advertisement

White Papers

Get your Windows 7 deployment off to the right start by implementing PC lockdown. A locked-down environment is easier and cheaper to support since users are less likely to make unnecessary changes to the core system configuration - read more here!

Essential Guides

Is your iSCSI "lossy"? The reality is that most off-the-shelf Ethernet hardware deployed for iSCSI can lose packets, resulting in slow performance or application downtime. Learn how to assess your current iSCSI infrastructure and engineer an advanced iSCSI SAN infrastructure.

Web Seminars

What's the best way to keep your network safe from malware? In this web seminar, security expert Greg Shields suggests an alternative method to the traditional blacklisting approach that is common with anti-virus and anti-malware solutions.

eLearning Series

We bring the experts direct to you to share their real-world perspective and expertise. During each event, three sessions stream in real time, so you can learn, ask questions, and get solutions.
Upcoming event: Getting the Most with Exchange 2010 with Paul Robichaux

Subscribe to Windows IT Pro!

Windows is a trademark of the Microsoft group of companies. Windows IT Pro is used by Penton Media Inc. under license from owner.