В Windows, какие расширения файлов обозначают исполняемый файл?

18

В Windows * .exe, * .bat, * .cmd и * .com все представляют программы или сценарии оболочки, которые можно запустить, просто дважды щелкнув их. Существуют ли другие расширения имени файла, указывающие на то, что файл является исполняемым?

РЕДАКТИРОВАТЬ : Когда я прыгаю в новый проект (или обратно в старый проект!), Одна из общих вещей, которые я хочу сделать, оглядываясь вокруг, это выяснить, какие инструменты есть. В Unix (который я использовал десятилетиями) есть бит выполнения, так что это так просто:

find . -executable -type f

Я подумал, что в Windows, которая, кажется, имеет гораздо более сложный механизм для «является ли этот исполняемый файл (и как я его выполняю)», будет относительно небольшое количество расширений имен файлов, которые будут служить примерно той же цели.

Для моего текущего проекта *.exe *.bat *.cmdпочти наверняка достаточно, но я решил спросить, был ли авторитетный список.

кругозор
источник

Ответы:

27

Основные «исполняемые» файлы (те, которые Windows ожидает выполнить через PATH) хранятся в переменной окружения, называемой PATHEXT. Вы можете увидеть это из командной строки:

C:\>set PATHEXT

На моей машине я получаю это (WinXP):

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1

Это не эксклюзивный список. Windows также будет выполнять другие файлы (например, хранители экрана имеют расширение .scr и являются исполняемыми файлами); Windows также разрешит выполнение других расширений файлов, но перечисленные выше являются исполняемыми расширениями по умолчанию .

Кен Уайт
источник
1
Блестящая находка!
barlop
1
Кроме того, вы можете добавить больше - например, добавить .py, чтобы "pyscript" запускал "pyscript.py"!
Фоши
@Phoshi, но с .py тогда ты собираешься на третье место, и нет конца
гуляй
@barlop; В самом деле, да, но это полезно знать, если касательно вопроса :)
Phoshi
5
Theres также .SCR для заставок. Они могут (и действительно) содержать фактический код выполнения для заставок. Они просто не в PATHEXT.
sinni800
2

Распространенным для программ установки является .msi.

StudioHack
источник
3
Это на самом деле не столько исполняемый формат, сколько формат скрипта, так как он все еще должен анализироваться msiexec.exe.
Hello71
@ Hello71: ты действительно 12?
парадроид
@paradroid: нет, он действительно нет. посмотрите на его стиль письма.
studiohack
@paradroid: это действительно имеет значение?
Hello71
@studiohack: Это то, что я запутался. @ Hello71: Да, это так, потому что если ты, ты меня пугаешь.
парадроид
2

.vbs это скрипт. и .js

Но если вы знаете какую-то историю, вы сможете лучше понять ситуацию. Я полагаю, что если бы я не использовал компьютеры так долго, как раньше, я мог бы также сосредоточиться на том, чтобы знать, какие расширения являются исполняемыми файлами ... потому что они довольно захватывающие и кажутся фундаментальными ... и я полагаю, что они ... Но обратите внимание, как со временем .COM сильно вымер после DOS, просто в основном известно, я полагаю, после этого, если вообще, в Windows 9x в оболочке command.com. Может быть, старые NT использовали их очень часто. Скрипты ... VBS пришло время win9x возможно ... так что появляются новые. PS1 даже новее, чем VBS.

.COM очень старый .. я не уверен, если Windows XP для примеров опирается на какие-либо файлы .COM. Но у него есть command.com больше для старых приложений, я думаю.

.BAT - это скрипт. Возвращение из дней DOS. все еще используется сегодня. .VBS более современен, но .BAT все еще используется и не выйдет из употребления в ближайшее время, и люди разумно используют оба. Есть .CMD, который я не использовал, но, вероятно, ничем не отличался. Есть ps1 (powershell. Это более современно, чем vbscript). Если мы говорим о скриптах в широком смысле, то есть .REG

На самом деле термин исполняемый файл применяется только к EXE и .COM (в основном, .COM вымерли ... больше для win9x (в командной строке win9x была command.com, cmd.exe не было), а COM-файлы - для DOS. Но не CMD NT, например командной оболочкой NT, является cmd.exe, хотя, как уже упоминалось, в NT есть command.com, я думаю, для устаревших приложений, но NT, скорее всего, не полагается на него)

.MSC, например, start..run..services.msc Они не являются исполняемыми файлами .. Я полагаю, что они являются своего рода сценарием .. services.msc, кажется, написан на xml) Но если это не так, то можно пойти еще дальше к несистемным вещам, и сказать, что HTML-страницы едины, потому что они интерпретируются .. как сценарий. Но не ОС, хотя .. .CPL не являются скриптами .. посмотрите на них в блокноте. Люди склонны не думать о них как об исполняемых файлах или скриптах, возможно, потому что их пишут только разработчики MS. (или если это делают другие, то это очень необычно!)

barlop
источник
К сожалению, добавление .MSCв PATHEXTне позволяет запускать оснастки MMC без добавления расширения (например, servicesвместо services.msc). :-(
Synetech
@ Synetech, потому что уже есть services.exe.
kinokijuf
@kinokijuf, правда; если вы запустите diskmgmt(без расширения) из командной строки, это будет работать, но servicesне будет. Однако ни один из них не будет работать, если вы попытаетесь запустить их из диалогового окна « Выполнить » без .mscрасширения, хотя общесистемная pathextпеременная содержит .msc.
Synetech
2

В Windows, какие расширения файлов обозначают исполняемый файл?

Обозначать что?

Я знаю, что этот вопрос сейчас звучит немного запутанно, но вопрос имеет значение. Когда я объясню, почему это важно, вопрос станет более понятным.

Хотя ответ Кена Уайта о переменной PATHEXT (в «среде» командной строки) является хорошим и кратким ответом, и этот ответ может хорошо сработать для вас, ответ неполон. Неполная причина в том, что правильный ответ отличается в зависимости от того, что вы пытаетесь сделать.

Например, вы можете попробовать:

  • Запустите программу из «традиционной командной строки» («CMD»), введя полное имя файла
  • Запустите программу из «традиционной командной строки» («CMD»), введя базовое имя файла, но оставив его расширение
  • Используйте команду «start», встроенную в «традиционную командную строку» («CMD»)
  • Запустите программу из PowerShell
  • Запустите программу из пункта меню «Выполнить», который находится в меню «Пуск».
  • Запустите программу из Проводника, дважды щелкнув значок, связанный с файлом, заканчивающимся расширением.
  • Скажите Microsoft Internet Explorer, чтобы открыть загруженный файл
  • Запустите программу, используя функцию из Microsoft Windows API. (Это то, что конечные пользователи обычно не делают, но программисты могут сделать это, и поэтому информация имеет к ним отношение.)

Некоторые из этих методов запуска программ могут использовать разные методы определения того, какие расширения файлов могут поддерживаться. В частности, использование CMD может отличаться от меню «Выполнить».

Например, загадочный блог Уэса: Настройка Windows Run Command ... отмечает, что проверяются различные места, включая раздел реестра.

Ответ также может зависеть от того, какая версия Microsoft Windows используется. В Windows 10 я просто набрал имя zip-файла в командной строке, и он открыл Windows Explorer. Кажется, я помню, что не работал в Windows XP (хотя в Windows XP я мог набрать «start filename.zip» и получить такой же эффект). Так что либо моя память неисправна, либо Microsoft пытается улучшить новые версии Windows. (Надеюсь, для меня последняя.)

В традиционной командной строке Windows 10 (с запуском «CMD»), когда я иду в местоположение (используя команду «CD») zip-файла и набираю «filename.zip», файл открывается. Когда я иду в это место и набираю «имя файла» (без расширения «.zip»), то Windows не находит файл. Однако если я запускаю « ECHO %PATHEXT%», а затем « SET PATHEXT=%PATHEXT%;.ZIP» (а затем ECHO %PATHEXT%снова « », чтобы убедиться, что у меня был нужный эффект), я могу ввести «имя файла», и в командной строке будет найден файл .ZIP. Итак, это эффект переменной% PATHEXT%.

Вы можете увидеть другой список расширений, запустив ASSOCкоманду. Например, выполнение этой команды показывает несколько строк вывода, включая следующее (в моей системе) - " .zip=CompressedFolder". Затем я могу увидеть, что это работает, набрав " FTYPE | FIND /I "CompressedFolder"". (Это предназначено для традиционной командной строки. PowerShell не понравятся эти неэкранированные кавычки.) (Если вы просто наберете " FTYPE" без остальной части этой командной строки, вы увидите намного больше вывода о других расширениях.)

Если я наберу " ASSOC | FIND /C "."" на моем компьютере с Windows 10, то обнаружу, что у меня 339 строк вывода, когда я проверяю связи файлов таким образом.

MS KB 162059 посвящена настройке, как Internet Explorer открывает документы Office.

Таким образом, запрос списка исполняемых файлов по умолчанию слишком расплывчатый. Различные компоненты Microsoft Windows могут использовать разные ресурсы, поэтому вопрос должен быть более конкретным для точного ответа.

В вопросе упоминалось использование Проводника для двойного щелчка по значку. Чтобы увидеть список используемых для этого исполняемых файлов, я думаю, вы захотите проверить реестр. Вы можете запустить это из командной строки:

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts

(Я не буду перечислять их здесь. На моем компьютере с Windows 10 их 286).

Это перечисляет расширения. Чтобы увидеть больше информации, включая информацию о расширениях:

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts /s

Итак, как вы можете видеть, этот, казалось бы, невинный вопрос на самом деле может быть довольно сложной темой. Я полагаю, что я обосновал, почему вопрос должен быть достаточно конкретным, чтобы иметь возможность получить полный ответ, в котором полностью рассматривается, как один компонент Windows может определять расширения имени файла. В ореховой оболочке для Windows нет только одного единственного ответа, поскольку в Windows есть несколько компонентов, которые ведут себя по-разному. Надеюсь, я начал показывать это и указал на некоторые дополнительные ресурсы, которые показывают соответствующую информацию.

TOOGAM
источник