<p>Is it possible to check what version of BPL (ie Rtl70.BPL, Indy70.bpl etc) are installed on a clients computer when the program starts?</p>

<p>I have had some programs crash because the BPL on there computer is different to the ones on the build machine.<br>
If i have to add each BPL used into the installer on each update, i think it will defeat one of the points on using them.</p>

<p>Delphi 7, if it makes a difference</p>

<p><hr>
Just a follow up on the issue i had.<br>
The rtl70.bpl file was only slightly different between the build computer and the clients.</p>

<blockquote>
  <p>Clients Computer: 7.0.4.453 760 KB (778,240 bytes)  Tuesday, 20 August 2002, 4:40:26 PM<br>
  Build computer: 7.0.4.453  760 KB (778,240 bytes)  ‎Friday, ‎9 ‎August ‎2002, ‏‎11:30:00 PM</p>
</blockquote>

<p>The updater i was using ignored them as being the same (no change in build number), but when i manually deleted and copied the files every thing seemed to work.</p>

If your program crashes, it's probably because it can't load the library it's dynamically linked with. (As you where saying, this happens when the system can't find a copy of the needed libaries anywhere in the search path).
The problem is, that this happens at startup of an application, which the Windows OS does via an API called
MapAndLoad
(also read
this
). This API is called before your application is even started, so I see no way to intercept this.
One suggestion I could give, would be to use a launcher (which has to be statically linked, to prevent problems for when there are /no/ libraries at all).
This launcher could inspect your actual application, see what imports it needs, checks your environment and display a nice failure/troubleshooting suggestion dialog to the user.