Windows Tools

Windows Installer Cleanup
allows you to manually remove the entries that .MSI installations create in the system's installed applications database. It creates an icon in the Start Menu under All Programs. Run it and you'll be presented with a list of all the apps registered in the Windows Installer database. To remove a program from the database, just select it and hit Remove. Note that this does not delete the program's directy. It simply removes any references to it from the .MSI database. Then you can rerun the installer without the computer complaining that said program is already installed. If a program appears in the Uninstall or change program section of the Control Panel but is not listed in Installer Cleanup, remove this manual with CCleaner.
lets you inspect the file activity of a given process in great detail, and create a running log of all the file accesses generated by that program.

When you run ProcessActivityView, click on "Start With Existing Process" and you'll be presented with a list of all running programs. Select one, click OK, and ProcessActivityView will begin to record everything that program does with respect to files: files opened, written to, closed, which program module performed the deed, the last process handle associated with the file, and any resulting error codes generated by the file access. This last option is especially useful if a program is trying to access a file that, for instance, it doesn't have permission to talk to and is crashing because it doesn't have code to handle such a condition. You can also launch a process from within ProcessActivityView (click "Start New Process") and start tracing its activity immediately. As with all of Nir Sofer's apps, you can generate reports in HTML, XML, plaintext, and CSV from the data harvested.

ProcessActivityView comes in two editions: x86 and x64. Note that the x64 version is used for inspecting x64 applications; it's not the version you must run on 64-bit Windows. In other words, if you have 64-bit Windows, you need to run one of either version of ProcessActivityView depending on the program you're inspecting: the 32-bit version for 32-bit apps and the 64-bit version for 64-bit apps. If you try to use the x64 version to inspect a 32-bit app, the app in question may crash. For safety's sake, start with the 32-bit edition first, and if you don't see the intended program, grab the 64-bit edition and use it. I keep both editions in one folder with "x64" tacked onto the end of the name of the 64-bit version.

Also note that ProcessActivityView is most useful when you're dealing with a specific program. It can't tabulate results from multiple programs at once.

Resource Monitor
Another of Microsoft's unsung tools (albeit only available in Windows Vista and Windows 7), Resource Monitor (Resmon) charts the way resources are used in your system, and in a way that makes it abundantly clear what's gobbling up what. Whenever you ask yourself, "Why is my hard drive grinding away like that?" you will find Resmon indispensible. Process Explorer is better at giving you detailed information about other aspects of a process, such as the thread stack or the process's security tokens. Resource Monitor focuses on performance and resource usage, making it an excellent complementary tool to Process Explorer.

Resmon's window is divided into five tabs: Overview, CPU, Memory, Disk, and Network. The Overview tab gives you a summary view of the other four; click one of the other tabs to bring up a detailed breakdown of that particular resource type. If something's stuck or hogging your system, you can terminate or suspend it or see what else it might be holding up.

Most of the troubleshooting I've done on systems revolves around disk usage, so I'll talk about the Disk tab first. Click it and you'll see which processes are accessing the disk, what files are being accessed, and -- in my opinion, most important -- the percentage of the queue used up for a particular storage device. The more queue is used up on a drive, the more any individual application has to wait to use it. The disk monitor also lists the response time for a given application (in milliseconds) and the I/O priority assigned to a given process. One of the biggest disk hogs on my system turned out to be Firefox, so I moved it off my system drive and immediately saw much better performance. The difference between Resmon and ProcessActivityView is that Resmon lets you see the whole system in context, while ProcessActivityView focuses on one app at a time.

The CPU tab should look familiar to anyone who has run Process Explorer or Task Manager, and it provides much of the same information, although by default it lists all the individual services that are running. If you select the check box next to a given process, you can filter all of the other panes in that tab -- the services list, the handles list, and the modules list -- so that they show only the items relevant to the selected process. It's a different way of slicing and dicing the information than used by Process Explorer, so it might provide a faster way for you to drill down and find details. The Network tab lets you see total network throughput and determine which TCP connections, remote hosts, or ports a particular program has open.

The Memory tab also features many of the same things as Process Explorer (and Task Manager), but they're organized a little differently. The physical memory chart gives you an easy-to-read graphical breakdown of how all the memory in the system is allocated; the memory usage columns in the process list is smaller than Process Explorer but also less bewildering. (Don't panic if you see, say, only 2MB of "free memory" in the Physical Memory chart. The way Windows allocates memory means that commonly used items are precached and released as needed to make room for program data.) If a process seems stuck, right-click on it and select "Analyze Wait Chain." You'll see a list of all the processes that particular program is waiting on, and you can terminate them to free up the stuck application.

Control Content Saver
Most troubleshooting apps are information gathering tools of one kind or another. Sometimes the information you need is in a strange place, such as an onscreen window from which you can't copy and paste text. The usual alternatives for collecting information from such windows has been one of the following:
  • Pencil and paper
  • Copying the message verbatim in Notepad
  • Taking screenshots
 I've never been fond of any of these methods. The first two increase the chances of making a mistake, and the third is hardly a useful way of sharing information. Why do it that way when, by all rights, you ought to be able to copy the contents of the window as plain text? Isn't that the whole point of using computers -- standardizing the way data is passed between things?

I was faced with various incarnations of this problem while troubleshooting a program whose only error messages appeared in modal dialog boxes right before the program crashed (bad program design in the extreme). After tiring of copying messages by hand or taking screenshots, I dug around and found Control Content Saver, a free and open source app by Jacquelin Potier that solved my problem and then some.

Control Content Saver lets you point to any control in any program's window that contains text and copy the results to the clipboard. This includes the following items:

  • Password fields, where you can both reveal the obscured text in the field and copy the results to the clipboard
  • Tree view controls, where you can save the entire tree, only the selected elements in the tree, or only the expanded branches of the tree
  • ListView controls (gridded controls), where you can save specific columns or only selected items
  • ListBox controls, where you can save everything or just selected items
Control Content Saver can also be invoked with a set of command-line parameters, where you can specify the handle number of the window to copy information from. This trick isn't likely to be useful to anyone other than programmers and others fairly high up on the tech-geek food chain, but it's handy all the same.

Control Content Saver can't capture some kinds of output. It can't grab control content from programs written in Java, for instance. Also, Windows Vista and Windows 7 apps that use the new Windows Presentation Foundation (WPF) look and feel may not return useful information. But you should be able to grab text from controls in conventional Windows apps without a hitch -- especially those annoying modal dialogs!