I have an update program that is completely independent of my main application. I run the update.exe to update the app.exe. To check to see if the file is in use, I move it
You could do the following to check if the application has other instances running:
Process.GetProcessesByName("app.exe", "Machine1").Length > 0
Which is a more appropriate way of checking if the app is running.
Have a look at File.Move MSDN documentation. It details what exceptions are thrown. You are allowed to rename an exe even if it is in Use in Vista.