Bosika, ИМХО для одного EXE выгонять из программы необязательно:
Код:

@Echo Off
Set PRGDIR=%ProgramFiles%\XXX
Set PRGEXE=yyy.exe
Set PRGNEW=yyy_new.exe
Set PRGOLD=yyy_old.exe
If Not Exist "%PRGDIR%\%PRGNEW%" MSG * "Предупреждение! Обновлений программы не обнаружено!"& Exit
If Exist "%PRGDIR%\%PRGOLD%" DEL /Q /F "%PRGDIR%\%PRGOLD%"
If Not Exist "%PRGDIR%\%PRGOLD%" REN "%PRGDIR%\%PRGEXE%" "%PRGOLD%"
If Not Exist "%PRGDIR%\%PRGEXE%" REN "%PRGDIR%\%PRGNEW%" "%PRGEXE%"
If Exist "%PRGDIR%\%PRGNEW%" MSG * "Ошибка! Обновление программы не произведено, обратитесь к администратору!"& Exit
MSG * "Сообщение! Программа обновлена, для применения изменений необходим выход из программы."