Может быть пример с комментариями поможет
#NoEnv
#NoTrayIcon
#SingleInstance force
#KeyHistory 0
SetBatchLines, -1
FileEncoding, utf-8
if (A_IsCompiled = 1) {
Msgbox, 64,, % "Executing from : " A_ScriptFullPath, 3
ExitApp
}
SplitPath, A_AhkPath,, AhkDir
IfNotExist %AhkDir%\Compiler\Ahk2Exe.exe
{
MsgBox, 16, Error, Ahk2Exe.exe not found, 3
ExitApp
}
SplitPath, A_ScriptFullPath,,,, ScriptNameNoEXT
IfExist %A_ScriptFullPath%:%ScriptNameNoEXT%.exe
{
; Если EXE с нужным именем уже записан в поток - запускаем
MsgBox, 64,, %A_ScriptFullPath%:%ScriptNameNoEXT%.exe `n already exist!, 3
RunWait %A_ScriptFullPath%:%ScriptNameNoEXT%.exe
; И удаляем EXE из потока
; Так хотелось бы сделать:
; FileDelete, %A_ScriptFullPath%:%ScriptNameNoEXT%.exe
; Так приходится делать:
FileRead, Script, %A_ScriptFullPath%
FileDelete, %A_ScriptFullPath%
FileAppend, %Script%, %A_ScriptFullPath%, UTF-8
; Смотрим на содержимое рабочей папки и не видим EXE в потоке
Run, cmd /k cd /d "%A_ScriptDir%" && dir /r
ExitApp
}
; Собираем подопытный EXE
RunWait, %AhkDir%\Compiler\Ahk2Exe.exe /in "%A_ScriptFullPath%", hide
; Копируем в поток скрипта
FileCopy, %A_ScriptDir%\%ScriptNameNoEXT%.exe, %A_ScriptFullPath%:%ScriptNameNoEXT%.exe
; Запускаем из потока
RunWait %A_ScriptFullPath%:%ScriptNameNoEXT%.exe
; После запускаем «видимый» EXE
RunWait %A_ScriptDir%\%ScriptNameNoEXT%.exe
; Удаляем видимый EXE
FileDelete, %A_ScriptDir%\%ScriptNameNoEXT%.exe
; Запускаем EXE из потока
RunWait %A_ScriptFullPath%:%ScriptNameNoEXT%.exe
; Смотрим на содержимое рабочей папки и видим EXE в потоке
Run, cmd /k cd /d "%A_ScriptDir%" && dir /r
ExitApp
Имеется в виду, что *.exe ведь в бинарном формате, «как текст» их писать-читать не совсем верно.