Most problems that occur with computers are the result of software-related issues: programs that lock up, printers that suddenly won’t print, operating systems that won’t boot and lots of other common quandaries are all somehow related to the operation of software on your PC. So, if these kinds of problems happen to you, take comfort in the fact that the good news (if you can call it that), is that you’re not alone.

Unfortunately, the bad news is that troubleshooting software problems on PCs is unquestionably the hardest problem-solving task you’re ever likely to run into (on your computer, that is). The reason for this is because of the Byzantine-like structure of today’s PC applications and operating systems. In essence, the problem can be boiled down to this: All the various pieces of software on your computer—your main applications, the drivers for your specific peripherals, and the various Windows system files—work together in an enormously complex web of inter-relationships. Adding, removing or altering one piece of that puzzle can (and often will) lead to software that just doesn’t work.

That would be fine and good if changes to this puzzle were few and far between, but for most people, these types of changes occur on a surprisingly frequent basis—and very often these changes are out of your control. Sometimes it’s a matter of simple user error (oops, shouldn’t have deleted that file), but often it’s due to conflicts between two or more different pieces of software, or even as a result of simply installing or removing applications. The end result is that software-based problems are an all-too-frequent occurrence on virtually all Windows computers.

Keep Current

One good general rule of thumb to keep in mind when doing software-related troubleshooting is to make sure you have the most recent versions of your applications, drivers and operating system. Usually that means taking an inventory of the software and hardware you have installed on or in your computer, and then trolling the web sites of the companies who make those products in search of updates, patches, service packs and other types of bug fixes.

If you're using Windows 98, Windows 98 SE or Windows ME, you should take advantage of the built-in Windows Update feature to help you in this regard. Be aware, however, that as handy as Windows Update may be, it will only provide you with operating system and some driver updates. It will not get all the drivers you need nor will it get any application updates you might require. So, use it as a starting point, but not as a sole resource.

Also remember to check for viruses. Most of the times you get a virus on your PC you'll know about it, but some of them work "stealthily" in the background, so you always have to be careful. Make sure that any computer you work on has good anti-virus software installed and properly configured so that it's regularly checking for viruses. Even more importantly, make sure that you keep the virus definition files for the program current. Unless you update those definitions on at least a monthly basis, your data will be at risk.

When is an Application not an Application?

Many of the software problems that people run into stem from the confusing nature of today’s Windows applications. Instead of consisting of one large chunk of code (as they generally used to do, and still in many cases do on the Mac), today’s software programs are actually made up of lots and lots of little pieces held together by an umbrella application. This umbrella app is typically the main program file you double-click on to get an application started. To confound matters further, these different pieces are often strewn across several different locations on your hard disk, which creates even more possibilities for errors or other breakdowns.

Many of these individual pieces are .DLLs, or Dynamic Link Libraries, which are chunks of program code that are called upon to perform various functions as you run an application. Another name for them is Application Extensions. Ideally, you never have to worry about these files—they just do their magic in the background while you do your work. And, when everything works right, that’s exactly what happens. If one of those files is deleted, changed or somehow corrupted, however, the application that uses them won’t work, and you’ll be in trouble.

Let me explain the installation process to give you an idea of the issues involved. When you install an application, what usually happens is that the installer creates a folder for your new program, copies some of the application’s pieces into there, copies other pieces into the Windows folder, creates shortcuts to your program on the Start Menu (or in the Program Manager for Windows 3.1), makes additions to the Windows Registry, and may even make some additions or alterations to your startup files, such as autoexec.bat, win.ini, etc. (In many cases, these changes are the cause of problems that keep your PC from booting properly. See the "PC Startup Troubleshooting Tips" article for more.)

The complexity of this process is the reason, by the way, that uninstaller applications were developed in the first place—it simply got to be too hard to keep track of where all the different pieces of an application were stored (if you could even get that info in the first place).

The files copied into the Windows folder may be .DLLs or they may be other files that the program’s developer has decided should be kept there. Unfortunately, so many developers have decided to store bits and pieces of their applications in the Windows folder that it’s become a dumping ground for a whole lot of junk. (Even worse, there’s no easy way to separate the wheat from the chaff—the useful, necessary stuff from the unneeded "bloatware"—so Windows folders just keep growing and growing….) Some of the .DLLs will probably be unique to the program you installed and will only be used by that application. Others will be shared files, which means they might be used by more than one application. And that’s where lots of problems arise.

Imagine, for example, that application A uses a shared .DLL called ABC.DLL. Now, let’s say that you install application B, which also happens to use the shared ABC.DLL. But, it turns out, application B uses a later version of ABC.DLL and so it overwrites the existing ABC.DLL file when it’s installed (without any warning to you). Now, depending on how application A is written, the next time it’s run and it looks for ABC.DLL, it may seamlessly work with the later version of ABC.DLL installed by application B, or it might crash (a likely possibility). If the latter occurs, it will undoubtedly lead you to wondering how that could’ve happened, since it worked just fine the day before. Sound familiar?

A similar type of situation is possible in reverse. Let’s say you try to remove application A from your system using Windows' Add/Remove Programs Control Panel (or even the application’s own uninstaller). At some point during that uninstall, the program may ask you if it should remove any shared .DLLs that are not being used by other applications. The default choice is to remove them and that's what most people do, but that can lead to more problems.

Again, depending on how the uninstaller works in conjunction with the application being removed, it’s possible that application A would remove ABC.DLL because it didn’t know that a newer version had been installed by application B and therefore would think that it wasn’t being used by another application. The result would be that after uninstalling application A, application B wouldn’t work because it was missing the ABC.DLL file (and you might even get an error message to that effect).

In both of these instances, the only real solution to these problems would be to reinstall the apps in question because there’s usually no simple way to reinstall only a shared .DLL (and even if there is, it may not be at all obvious where it needs to be located). In the first example, you’d probably have to first get an updated version of application A from the vendor’s web site and then reinstall that, hoping that it works with the new version of the ABC.DLL (and praying that it doesn’t add any new shared .DLLs that might break other applications!). In the second example, you’d just need to reinstall application B.

Windows System File Problems

A related, but even worse version of the problem can occur if an application overwrites some of the shared system files used by Windows 95—although that often means the operating system won’t load. (The same types of problems can also happen with Windows 98 or Windows ME, although Win98's System File Checker utility can help take care of these problems much more easily.) If that’s the case—it is relatively rare—you’ll probably need to reinstall Windows itself. (And if you do, you'll probably need to have a boot disk complete with a CD-ROM driver. Here's an article that tells you how to create one.)

If you do think it's time to reinstall Windows, you might try the Windows Setup program's Verify option first—it should save you time and maybe even a few extra headaches. The Verify option is supposed to be available any time you run Windows 95, 98 or Windows ME Setup on a machine that already has the same version of the operating system installed (although I've found that it doesn't always show up for some reason).

What happens is, the Setup program detects that Windows is already installed and then asks if you'd like to Verify your installation. If you do choose to Verify, it goes through an installation log file called Setuplog.txt (you can find it in your main hard drive's root directory--e.g., C:\--if you want to look at it) to see what should be installed, confirms that all the required files exist and aren't damaged, and then silently reinstalls any components that it finds are missing or damaged. In some cases, this will solve Windows system problems.

Diving In

If your willing to get your digital fingernails a bit dirty and you know the specific name of a .DLL or other Windows system file that's causing a problem (perhaps because an error message keeps telling you the problem file's name), there's another option. You can try to individually reinstall particular files. The process is not trivial, however, because all the Windows system files are stored in compressed Cabinet (.cab) files either on your hard disk, the Windows 95/98/ME CD-ROM, or both. What you have to do is find the compressed file within a particular .cab file, decompress it, and then copy it to appropriate directory inside the Windows folder.

Microsoft includes a DOS-based .cab file decompressor called Extract.exe on the Windows 95 CD and installs it in your Windows folder as part of the default installation. However, as you'll be able to quickly see from this article in Microsoft's Knowledge Base on how to use the Extract program, the program is not easy to use. Nevertheless, it can help you find the files you need. Another more straightforward option is to get the CabView utility from Microsoft (it's party of their handy PowerToys utility pack), and use it to specifically find and then decompress the component you need. Another improvement in Windows 98 and Windows ME is you can view the contents of CAB files and extract individual elements just by using Windows Explorer.

Most shared .DLL problems can be avoided if the programmers have done their homework, but given all the possible combinations of programs and .DLLs that are out there, it’s almost impossible for them to avoid all problems. And unfortunately, as frustrating as it may be, the only real answer to these problems is to reinstall the software. In fact, I’ve even heard or read some people recommend that you reinstall Windows and your apps every 3-6 months or so to avoid problems. I think this is overkill, but the thought has passed through my mind on more than one occasion as I’ve struggled through trying to resolve software problems on my own or other people’s machines.

Another possible solution is to not remove any shared .DLL files when you uninstall an application, but while that may work in a few instances, it eventually leads to a Windows folder full of unnecessary, potentially problematic stuff, so it’s not a great long-term solution. Frankly, there’s no great long-term solution other than to slug your way through, keeping your software as up-to-date as you can (and even that doesn’t always work—sometimes it’s better just to find a combination of software that works and stick with it).

Getting into Conflict

Oftentimes, software problems are due to conflicts between two applications, which basically means one or both of the programs in question does something in the course of their normal operation that causes the other application to crash or to not function properly. This is related, though not identical, to the .DLL problems described above.

Some conflicts are relatively easy to troubleshoot. If you install a new application and every time you try to run it while your word processor is open the new program crashes, but the new application works fine if the word processor isn’t running, then you’ve got a software conflict. The only way to fix it is by getting an update for one (or sometimes both) of the applications in question. Hopefully you won’t end up in a situation where each vendor claims it’s the other’s fault and nothing gets done, but be aware that that exact scenario sometimes happens.

Other conflicts are much harder to determine. One thing you should check is to see if the conflict is related to applications that are running in the background. Unbeknownst to most computer users, quite a few small applications are usually running in the background on typical Windows 95/98/ME machine. This is true even if you don’t see any applications running on the Taskbar (which is why this can be so confusing).

Under Windows 95, you can see a list of all applications running at a particular time by holding down Ctl-Alt-Del simultaneously (just do it once, though—if you do press all three again, it will restart your machine without prompting you to save any open files). The Close Program Window that pops up lists all the currently running tasks. While some are easy to understand, many of the programs listed only use obscure names like Systray or Rnaapp (which happen to be System Tray—which is the system application that puts all the icons in the lower-right corner of your Taskbar—and Remote Networking—which is used by Dial-Up Networking whenever you connect to the Internet via a modem). Figuring out what some of these various programs are and do can be extremely difficult because there’s usually very little information available about them.

Again, Microsoft has improved this situation in Windows 98 and ME by including a handy utility called Microsoft System Information that gives a thorough, understandable breakdown of all the different software components that are open and running on your machine at the time you run the utility.

One possible option for Windows 95 users is to pick up a copy of a shareware utility from SiSoft called Sandra. Sandra's Processes Information module can not only give you more information about each task (technically called a process) currently running on your machine, it can also tell you how much memory each one is using. Very handy.

Another option for Windows 95 users is to get a copy of the WinTop utility, which is part of Microsoft's Kernel Toys for Windows 95. What WinTop does is give a quick overview of what applications and other software processes are open on your computer at a given time and shows you how much of the processor's time they're demanding.

For troubleshooting purposes under Windows 95, 98, or ME you can quit applications individually from the Close Program Window mentioned earlier by selecting one and clicking on End Task. As you go through and quit each one you can see if that resolves your problem, but it’s a tedious process that doesn’t always give you the results you want. Another way to prevent (or see) some, though not all, of the applications that run in the background is to check your Startup folder, which is buried inside the Windows folder (it’s in the Programs folder, which is inside the StartMenu folder). Many applications place small utility programs inside the Startup folder, so you might be surprised at all the stuff you find there.

All the applications that are listed in the Startup folder are run in the background every time Windows 95 starts. Some of them put an icon in the System Tray to let you know that they’re running, but many of them don’t provide any visual indication whatsoever that they’re currently in use. If you want to prevent them from loading at startup to check for conflicts with certain programs, or if you just want to remove them completely, just remove the shortcuts listed in the Startup folder, either by deleting them or moving them to a different place. (Note that deleting a shortcut has no impact on the real file that the shortcut points to—it will still be on your system, but it won’t load at the system’s startup.)

I’ll Take the Driver

So far, I’ve only touched on applications, but there’s still more (hey, I told you this was hard…). Drivers, which are small pieces of software that allow your computer and operating system to "talk" to various peripherals that make up your system, such as your video card, printer, CD-ROM, etc., are often at the heart of software-related computer problems.

Like regular applications, drivers are subject to bugs, or errors, in them that can cause them to not function properly. More often than not, however, driver problems are due to conflicts or incompatibilities either with specific applications, other drivers, or some piece of system software. As I described in the beginning of this piece, today’s software is like a very complex puzzle and changing one piece in a seemingly unrelated area of the PC’s total software system can create problems somewhere else.

Driver problems can manifest themselves in a number of different ways. For example, if an application that used to be able to print can no longer print, it might be the application’s problem, but there’s also a very good chance that something has happened to the printer driver. Either a new piece of software that was recently installed has created a conflict that prevents the driver from working properly, or the driver file may have somehow been corrupted. (File corruption is a baffling, confounding problem that can happen for any number of reasons, including a quick electrical surge, an error in an application, a hardware error, and more.)

As with application problems, the only way to resolve many driver issues is to get an updated version of the driver and reinstall it. (For more info on installing or updating drivers, see the "PC Hardware Troubleshooting Tips" article.)

The End

As difficult as it may be to accept, there’s no magic solution that can tell you exactly what’s causing the problem when a piece of software doesn’t work right. Even utilities that claim to solve system software problems for you are only partially successful and sometimes they introduce new incompatibilities or other problems of their own. That’s part of the reason why software troubleshooting is so tough—and often such a frustratingly inexact science. If you keep your calm and use your head, though, you can usually get through lots of seemingly tough situations on your own (or perhaps with the help of a vendor-supplied update). Remember this maxim: when in doubt, reinstall! (For more on reinstalling everything, see "Starting Over: Repartitioning, Reformatting and Reinstalling.") Good luck.