There are ways of including the checksum in the calculation of the checksum. I'm not familiar with these methods myself, but I have read articles about copy protection in games such as Spyro the Dragon where that is what they used. The article is on GamaSutra.

Generating a checksum for an executable each time it is compiled would be very easy if the Borland IDE gave us the opportunity to run arbitrary commands before and after a build process. Visual Studio has this feature and we use it extensively here at work. If Borland did have this feature, all you would need is a small program that generates the checksum to insert into the executable and call this checksum generator after the build process has completed. Easy! Every time you recompiled the project a new checksum would be generated and inserted into the executable. But alas, Borland's project management features in the IDE have always been woefully inadequate.