Keep the newest/current version of the project in a database.
Create a Webservice/WCF service that presents that version online and has a file copying method.
Also, create a small Updater utility that goes with your larger project.
Then add a reference in your project to the service, and compare the two version numbers.
If the presented "online"-version is newer, then shut down the system/program and execute the updater utility that copies the new version using the file copying method in the service.
By using a Webservice/WCF you don't have to worry about firewalls, since it's basically normal HTTP-communication.