AFAIK, there is no way to prevent the temp file from being created - it's part of how Crystal works. However, try this:
In the FormClosing event handler for the form where the report is viewed, put something like the following:
myCrystalViewer.Dispose();
The Crystal .NET components are actually wrappers for COM components. COM is not very good about cleaning up after itself. By specifically calling Dispose, you force it to clean up, release memory, and (I believe) delete the temp files.
-Dell