I'm trying to create an auto-updating app using Winforms. I can't use click-once or the updater block because the app needs to run on Mono also.
Once I download the new exe file from a webservice, is it possible to unlock the running exe file, replace it, and restart the app?
No. You can't replace a running executable. You'll get an access violation.
The best option is to create a separate, small executable that does the replacement for you. Your application can call it, shut itself down, and the second executable can do the download/replace/relaunch for you.
This also has the advantage of allowing you to setup the "updated" to require elevated permissions, which may be required, depending on where the application you're replacing is installed.