En Windows, ¿qué extensiones de nombre de archivo denotan un ejecutable?

17

En Windows, * .exe, * .bat, * .cmd y * .com representan programas o scripts de shell que se pueden ejecutar, simplemente haciendo doble clic en ellos. ¿Hay alguna otra extensión de nombre de archivo que indique que un archivo es ejecutable?

EDITAR : Cuando salto a un nuevo proyecto (¡o vuelvo a un proyecto antiguo!), Una de las cosas comunes que quiero hacer al mirar alrededor es descubrir qué herramientas hay. En Unix (que he usado durante décadas), hay un bit de ejecución, por lo que es tan simple como:

find . -executable -type f

Pensé que en Windows, que parece tener un mecanismo mucho más complejo para "es este ejecutable (y cómo lo ejecuto)", habría un número relativamente pequeño de extensiones de nombre de archivo que servirían aproximadamente para el mismo propósito.

Para mi proyecto actual, *.exe *.bat *.cmdes casi seguro suficiente, pero pensé en preguntar si había una lista autorizada.

Conocer
fuente

Respuestas:

26

Los archivos básicos "ejecutables" (los que Windows busca ejecutar a través de PATH) se almacenan en una variable de entorno llamada PATHEXT. Puede ver esto desde un símbolo del sistema:

C:\>set PATHEXT

En mi máquina, obtengo esto (WinXP):

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

Esta no es una lista exclusiva. Windows también ejecutará otros archivos (por ejemplo, los protectores de pantalla tienen una extensión de .scr y son ejecutables); Windows también permitirá la ejecución de otras extensiones de archivo, pero las enumeradas anteriormente son las extensiones ejecutables predeterminadas .

Ken White
fuente
1
Brillante hallazgo!
barlop
1
además, puede agregar más, por ejemplo, agregar .py para permitir que "pyscript" ejecute "pyscript.py".
Phoshi
@Phoshi pero con .py, entonces vas a ser un tercero, y no hay fin
barlop
@barlop; De hecho lo soy, pero es útil saberlo, aunque sea tangencial a la pregunta :)
Phoshi
55
También hay .SCR para salvapantallas. Pueden (y lo hacen) contener código de ejecución real para los protectores de pantalla. Simplemente no están en PATHEXT.
sinni800
2

Uno común para los programas de instalación es .msi.

studiohack
fuente
3
Realmente es menos un formato ejecutable y más un formato de script, ya que todavía necesita ser analizado por msiexec.exe.
Hola71
@ Hello71: ¿Realmente tienes 12 años?
Paradroid
@paradroid: no, realmente no lo es. mira su estilo de escritura.
studiohack
@paradroid: ¿Realmente importa?
Hola71 el
@studiohack: Eso es lo que me confunde. @ Hello71: Sí, porque si lo estás, me asustas.
paradroid
2

.vbs es un script. y .js

Pero si conoce algo de historia, entonces podría poner las cosas en contexto mejor. Supongo que si no hubiera usado las computadoras durante el tiempo que lo he hecho, también podría centrarme en saber qué extensiones son ejecutables ... porque son bastante emocionantes y parecen fundamentales ... y supongo que sí ... Pero note cómo con el tiempo, .COM se extinguió mucho después de DOS, solo conocido principalmente, supongo que después de eso, si es que lo hizo, en Windows 9x en el shell de command.com. Quizás los viejos NT los usaban mucho. Scripts ... vbs llegó alrededor de win9x quizás ... entonces aparecen nuevos. ps1 es incluso más nuevo que vbs.

.COM es muy antiguo. No estoy seguro si Windows XP, por ejemplo, depende de algún archivo .COM. Pero tiene un comando.com más para aplicaciones heredadas, supongo.

.BAT es un script ... de los días de DOS. todavía en uso hoy. .VBS es más moderno, pero .BAT todavía se usa y no se dejará de usar en el corto plazo, y la gente usa sensatamente ambos. Hay .CMD que no he usado pero que probablemente no sea tan diferente a nada. Hay ps1 (powershell. Esto es más moderno que vbscript) Si hablamos de scripts en un sentido laxo, hay .REG

Realmente, el término ejecutable solo se aplica a EXE y .COM (.COM está básicamente extinto ... más una cosa de win9x (el símbolo del sistema en win9x era command.com, no había cmd.exe), y los archivos COM son cosa de DOS. Pero no CMD de NT, por ejemplo, el shell de comandos de NT es cmd.exe, aunque, como se mencionó, hay un command.com en NT, supongo que para aplicaciones heredadas, pero NT probablemente no confíe en él)

.MSC, por ejemplo, start..run..services.msc No son ejecutables..Supongo que son una especie de script .. services.msc parece estar escrito en xml) Pero si se pierde, uno podría ir un paso más allá a cosas que no son del sistema, y ​​dicen que las páginas HTML son una porque se interpretan ... como un script. Pero no por el sistema operativo, sin embargo ... .CPL no son scripts ... míralos en el bloc de notas. La gente tiende a no pensar en ellos como ejecutables o scripts, tal vez porque solo los desarrolladores de MS los escriben. (o si otros lo hacen, ¡eso es muy poco frecuente!)

barlop
fuente
Desafortunadamente, agregar .MSCal PATHEXTno le permite ejecutar complementos MMC sin agregar la extensión (por ejemplo, en serviceslugar de services.msc). :-(
Synetech
@Synetech porque ya hay un services.exe.
kinokijuf
@kinokijuf, cierto; si ejecuta diskmgmt(sin la extensión) desde un símbolo del sistema , funcionará, pero servicesno lo hará. Sin embargo, ninguno de ellos funcionará si intenta ejecutarlos desde el cuadro de diálogo Ejecutar sin la .mscextensión, aunque la pathextvariable de todo el sistema contenga .msc.
Synetech
2

En Windows, ¿qué extensiones de nombre de archivo denotan un ejecutable?

¿Denotar a qué?

Sé que esa pregunta probablemente suene un poco confusa en este momento, pero la pregunta importa. Mientras explico por qué es importante, la pregunta se hará más clara.

Aunque la respuesta de Ken White de la variable PATHEXT (en el "entorno" del símbolo del sistema) es una respuesta agradable y breve, y esa respuesta puede funcionar bien para usted, la respuesta es incompleta. La razón que está incompleta es que la respuesta correcta es diferente en función de lo que está tratando de hacer.

Por ejemplo, puede intentar:

  • Ejecute un programa desde un "símbolo del sistema tradicional" ("CMD"), escribiendo su nombre de archivo completo
  • Ejecute un programa desde un "símbolo del sistema tradicional" ("CMD"), escribiendo el nombre de archivo base, pero dejando de lado su extensión
  • Utilice el comando "inicio" integrado en el "símbolo del sistema tradicional" ("CMD")
  • Ejecute un programa desde PowerShell
  • Ejecute un programa desde el elemento de menú "Ejecutar", que se encuentra en el menú de inicio
  • Ejecute un programa desde el Explorador, intentando hacer doble clic en un icono relacionado con un archivo que termina con la extensión
  • Dile a Microsoft Internet Explorer que abra un archivo descargado
  • Ejecute un programa utilizando una función de la API de Microsoft Windows. (Esto es algo que los usuarios finales no suelen hacer, pero los programadores informáticos pueden hacer esto, por lo que la información es relevante para ellos).

Algunos de estos métodos para ejecutar programas pueden usar diferentes métodos para determinar qué extensiones de nombre de archivo pueden ser compatibles. En particular, el uso de CMD puede ser diferente al menú Ejecutar.

Por ejemplo, el desconcertante blog de Wes: Personalizando el comando Ejecutar de Windows ... observa diferentes ubicaciones que se verifican, incluida la clave de registro.

La respuesta también puede depender de qué versión de Microsoft Windows se esté utilizando. En Windows 10, simplemente escribí el nombre de un archivo zip en el símbolo del sistema, y ​​se abrió el Explorador de Windows. Me parece recordar que no funciona en Windows XP (aunque en Windows XP, podría escribir "start filename.zip" y obtener el mismo tipo de efecto). Entonces, mi memoria está defectuosa o Microsoft ha estado tratando de hacer mejoras en las versiones más nuevas de Windows. (Con suerte, para mí, este último).

En el símbolo del sistema tradicional de Windows 10 (ejecutando "CMD"), cuando voy a la ubicación (usando el comando "CD") de un archivo zip y escribo "filename.zip", se abrirá el archivo. Cuando voy a esa ubicación y escribo "nombre de archivo" (sin la extensión de archivo ".zip"), Windows no encuentra el archivo. Sin embargo, si ejecuto " ECHO %PATHEXT%" y luego " SET PATHEXT=%PATHEXT%;.ZIP" (y luego " ECHO %PATHEXT%" nuevamente, para asegurarme de que tuve el efecto deseado), entonces puedo escribir "nombre de archivo" y el símbolo del sistema encontrará el archivo .ZIP. Entonces, ese es el efecto de la variable% PATHEXT%.

Es posible que pueda ver otra lista de extensiones ejecutando el ASSOCcomando. Por ejemplo, ejecutar ese comando muestra varias líneas de salida, incluidas las siguientes (en mi sistema) - " .zip=CompressedFolder". Entonces, puedo ver lo que se ejecuta al escribir " FTYPE | FIND /I "CompressedFolder"". (Eso está destinado a la línea de comando tradicional. A PowerShell no le gustarán esas comillas sin escape FTYPE).

Si escribo " ASSOC | FIND /C "."", en mi computadora con Windows 10, entonces encuentro que tengo 339 líneas de salida cuando compruebo las asociaciones de archivos de esa manera.

MS KB 162059 se trata de ajustar cómo Internet Explorer abre los documentos de Office.

Por lo tanto, pedir la lista de ejecutables predeterminados es demasiado vago. Los diferentes componentes de Microsoft Windows pueden usar diferentes recursos, por lo que la pregunta debe ser más específica para obtener una respuesta precisa.

La pregunta mencionó el uso de Explorer para hacer doble clic en un icono. Para ver la lista de ejecutables utilizados por eso, creo que querrás consultar el registro. Puede ejecutar esto desde un símbolo del sistema:

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

(No voy a enumerarlos aquí. Hay 286 de ellos en mi computadora con Windows 10).

Eso enumera las extensiones. Para ver más información, incluidos detalles sobre las extensiones:

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

Entonces, como puede ver ahora, esta pregunta aparentemente inocente en realidad puede ser un tema bastante complejo. Creo que he defendido por qué una pregunta debe ser bastante específica para poder obtener una respuesta completa que aborde totalmente cómo un solo componente de Windows puede determinar las extensiones de nombre de archivo. En pocas palabras, no hay una sola respuesta para Windows, ya que Windows tiene múltiples componentes que se comportan de diferentes maneras. Espero haber comenzado a mostrar eso y señalar algunos recursos adicionales que muestran información relevante.

TOOGAM
fuente