каждый исполняемый файл в Windows имеет расширение .exe
Это не правильно. В DOS было 2 исполняемых файла с расширениями: *.COM
и *.EXE
Windows унаследовала их, поэтому она также поддерживает * .com и * .exe. Обратите внимание, что * .exe - это просто "контейнер", содержащий различные исполняемые форматы.
Если вы запустите команду без расширения, Windows добавит расширения в переменную среды %pathext%
и будет искать, пока не найдет первый файл с таким именем. Значение по умолчанию для переменной выглядит следующим образом
>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
Как вы можете видеть, существуют другие типы исполняемых файлов, которые будет запускать Windows (без расширения), но большинство из них являются сценариями, а не двоичными исполняемыми файлами.
Тем не менее, Windows фактически не использует расширение файла для определения формата файла. Любые файлы, начинающиеся с MZ
(который является подписью для формата MZ), будут рассматриваться как исполняемый файл.
Windows 10 также имеет возможность запускать исполняемые файлы Linux ELF с введением windows-subsystem-for-linux
Установочные файлы в Windows также часто предоставляются в файлах * .msi, формат которых читается установщиком Windows, хотя, строго говоря, это не исполняемый файл.