My question is about deleting a temp pst file that is created by our code in Vista environment.
Code makes a copy of the system user profile pst with a different name, uses that file to open other emails and attachments for us to extract. After we are done, we delete the temporary file using kill filename.
Although this works fin in XP, somehow vista is holding on to the file longer time while code is running. If I debug it, kill function works, although still need to wait a second or two.
How can release that pst file and make sure that I can delete it in the code? Is there such a command or tricks to it?
You could use a timer and an error handler put the code to kill the file along with an error handler in the timer tick routine. Activate the timer when you are ready to kill the file and place code in the timer tick routine to disable the timer once it has actually killed the file. This way it will keep trying until the file is deleted.
Actually I do have a routine with a function called forcetokill. Interesting thing is, even if I put a loop with a timer, it loops forever. If I stop it for debug, and continue a second or two later, it deletes the file. This works in XP but not in Vista. Something is keeping the handle ties while code is running. I wonder if Vista kernel has something to do with it.
Create a SECOND program called ForceKill() that waits while you close your app, then if the pst file isn't release, to kill it after your program finishes
Also, what folder is it written in? Try a subfolder somewhere else
Actually I do have a routine with a function called forcetokill. Interesting thing is, even if I put a loop with a timer, it loops forever. If I stop it for debug, and continue a second or two later, it deletes the file. This works in XP but not in Vista. Something is keeping the handle ties while code is running. I wonder if Vista kernel has something to do with it.
Don't use a loop. Use a timer control. Unless of course you need the file deleted before you continue on to the next line of code in which case the sleep statement suggested by another poster within a loop may do the trick though you should use a timeout in the loop so that it will exit at some point if the file is not deleted after a period of time.
In general I would avoid long sleep statements as they make the program non-responsive, A timer will work with the program and cause no noticable performance hit.
UAC is off. I used “timer” and “sleep” in the loop and without loop. Unless if I debug, or close the IDE, I can't delete the file. When I run the same code over and over again, it's random that file gets deleted.
I worked this thing around for now
Each time program runs that code, it creates a session. Each session number is unique and it also creates temporary pst file such as 0001.pst 0002.pst etc. What I did is, anytime program returns "0" error code when it tries to delete, I assume I can delete all the leftover pst files and I just kill everything in the batch folder with pst extension.
This seems like working fine. Leftovers are not harmful, although this is only a workaround, not the fix... I have to live with it for while
Thanks all for your replies, if you have any other solutions, please let me know.
Bookmarks