The software would install particular files somewhere - if you know what those are you can check for their presence. Not foolproof, but should be pretty reliable. This won't work in situations where a SecurityManager is present (applets, possibly web apps depending on the servlet container setup), because permission to access arbitrary files won't be given.
This would seem highly unreliable to me, I rarely install things in the default location on Windows as "Program Files" is too long and has a space. If you are calling a third party application I would ask the user where its is installed and if you can't find the program there, give the user an warning/error as the case may be. [ December 05, 2006: Message edited by: Tim LeMaster ]
whenever some software installs on windows operating system it adds some information in the windows registry...So the first thing you need to know which registry entries a particular software adds to the windows registry. than you can easily read information from windows registry using java.util.prefs.Preferences class
I didn't see anything in the question that indicates that a Windows-only solution like reading the registry will suffice. But anyway, the Preferences class can not read arbitrary registry entries, only a very limited subset of entries generated by other applications also using this class. For a way of reading all registry entries, [URL=How to read the Windows Registry]look here[/url].
Power corrupts. Absolute power xxxxxxxxxxxxxxxx is kinda neat.