You cannot move an EXE file while it is being executed, you will either:
- have code that copies the EXE to another location
IO.File.Copy()
Click Once
installs to a really obsecure location, not program files. It does NOT require admin.
If you add a MSI setup project
to your solution you can see this answer to hardcode the install path to C:\Program Files\
If you choose the MSI solution you will need Admin to install. Because the setup.exe is responsible for the downloading/installing components (such as dotnet) it requires Admin to be executed.
If you know the PC your application is going to be installed on already has the .Net Framework & etc then the easiest way to avoid the UAC prompt is to run the MSI not the setup.exe. Running the MSI wont ask for admin.
You can also follow this answer to make your upgrades install to the same folder.