This is relatively easy to do. Basically, your application calls a web service to compare its version with the version available on the server. If the server version is newer, your application loads the new EXE as an array of byte [].
Further, since you cannot delete or overwrite the executable EXE file, your application will rename the source EXE file to something like "MyApplication.old" (fortunately, the OS allows this). Then your application saves the downloaded byte [] in the same folder as the original EXE file and with the same original name (for example, "MyApplication.exe"). Then you show a message to the user (for example, "a new version has been detected, reboot") and close.
, , . ( "MyApplication.old" ), .
- ( , , ) 100% . .