Totally agree with @alouigroup and @cnut17 - after loading into memory it is impossible to save "process" as .EXE.
However, if think practically, program can load own .EXE into memory at its very start, and then, when you need to write, it can write what was saved before in memory. So, technically it will not be "saving itself", but practically - it will be.
About me - working with Delphi since its start in 1995. Also know C/C++, x86 Assembler, low level programming.