No Windows, quais extensões de nome de arquivo indicam um executável?


17

No Windows, * .exe, * .bat, * .cmd e * .com representam programas ou scripts de shell que podem ser executados, simplesmente clicando duas vezes neles. Existem outras extensões de nome de arquivo que indicam que um arquivo é executável?

Edição : Quando eu pulo para um novo projeto (ou de volta para um projeto antigo!), Uma das coisas comuns que quero fazer ao olhar em volta é descobrir quais ferramentas existem. No Unix (que eu uso há décadas), há um bit de execução, portanto, é tão simples quanto:

find . -executable -type f

Imaginei que no Windows, que parece ter um mecanismo muito mais complexo para "este executável (e como o executo)", haveria um número relativamente pequeno de extensões de nome de arquivo que serviriam aproximadamente para o mesmo propósito.

Para o meu projeto atual, *.exe *.bat *.cmdé quase certamente suficiente, mas pensei em perguntar se havia uma lista autorizada.

Respostas:


26

Os arquivos "executáveis" básicos (aqueles que o Windows parece executar através do PATH) são armazenados em uma variável ambiental chamada PATHEXT. Você pode ver isso em um prompt de comando:

C:\>set PATHEXT

Na minha máquina, eu recebo este (WinXP):

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

Esta não é uma lista exclusiva. O Windows também executará outros arquivos (por exemplo, os protetores de tela têm uma extensão .scr e são executáveis); O Windows também permitirá a execução de outras extensões de arquivo, mas as listadas acima são as extensões executáveis padrão .


1
Achado brilhante!
barlop

1
Além disso, você pode adicionar mais - por exemplo, adicione .py para permitir que "pyscript" execute "pyscript.py"!
Phoshi

@Phoshi mas com .py então você está indo para uma terceira parte, e não há fim
barlop

@barlop; Na verdade eu sou, mas é uma coisa útil de saber, se tangente à pergunta :)
Phoshi

5
Há também .SCR para protetores de tela. Eles podem (e contêm) conter código de execução real para os protetores de tela. Eles simplesmente não estão no PATHEXT.
Sinni800

2

Um dos programas de instalação mais comuns é o .msi.


3
É realmente menos um formato executável e mais um formato de script, pois ainda precisa ser analisado msiexec.exe.
Hello71

@ Hello71: Você realmente tem 12 anos?
Paradroid

@paradroid: não, ele realmente não é. veja o seu estilo de escrita.
studiohack

@paradroid: Isso realmente importa?
Hello71

@studiohack: É disso que estou confuso. @ Hello71: Sim, porque se você é, me assusta.
Paradroid

2

.vbs é um script. e .js

Mas se você conhece alguma história, poderá colocar as coisas em contexto melhor. Suponho que, se não tivesse usado computadores há tanto tempo, também poderia me concentrar em saber quais extensões são executáveis ​​... porque são bastante empolgantes e parecem fundamentais ... e suponho que sejam ... Mas observe como com o tempo, o .COM morreu muito depois do DOS, apenas o mais conhecido, suponho depois disso, se houver, no Windows 9x no shell command.com. Talvez os NTs antigos os usassem bastante. Scripts .. vbs surgiram em torno de win9x, talvez .. então aparecem novos. ps1 é ainda mais recente que vbs.

.COM é muito antigo. Não sei se o Windows XP, por exemplo, se baseia em arquivos .COM. Mas ele tem mais um command.com para aplicativos herdados, eu acho.

.BAT é um script .. de volta para os dias do DOS. ainda em uso hoje. O .VBS é mais moderno, mas o .BAT ainda é usado e não será mais usado em breve, e as pessoas sensatamente usam os dois. Há .CMD que eu não usei, mas provavelmente não é tão diferente de nada. Existe o ps1 (powershell. Isso é mais moderno que o vbscript) Se estamos falando de scripts em um sentido genérico, existem .REG

Realmente, o termo executável se aplica apenas a EXE e .COM (o COM é basicamente extinto. Mas não o CMD do NT, por exemplo, o shell de comando do NT é cmd.exe, embora, como mencionado, exista um command.com no NT, acho que para aplicativos herdados, mas o NT provavelmente não depende dele)

.MSC, por exemplo, start..run..services.msc Eles não são executáveis ​​.. Suponho que sejam um tipo de script .. services.msc parece estar escrito em xml) para coisas que não são do sistema, e dizem que as páginas HTML são uma só porque são interpretadas .. como um script. Mas não pelo sistema operacional .. CPL não são scripts .. olhe para eles no bloco de notas. As pessoas tendem a não pensar neles como executáveis ​​ou scripts, talvez porque apenas os desenvolvedores da MS os escrevam. (ou se outros o fizerem, isso é muito incomum!)


Infelizmente, adicionar .MSCao PATHEXTnão permite que você execute snap-ins do MMC sem adicionar a extensão (por exemplo, em servicesvez de services.msc). :-(
Synetech 24/02

@ Synetech, porque já existe um services.exe.
kinokijuf

@kinokijuf, verdadeiro; se você executar diskmgmt(sem a extensão) em um prompt de comando, ele funcionará, mas a execução servicesnão. No entanto, nenhum deles funcionará se você tentar executá-los na caixa de diálogo Executar sem a .mscextensão, mesmo que a pathextvariável em todo o sistema contenha .msc.
Synetech

2

No Windows, quais extensões de nome de arquivo indicam um executável?

Denotar para quê?

Eu sei que essa pergunta provavelmente parece um pouco confusa no momento, mas a questão importa. Como explico por que isso importa, a questão ficará mais clara.

Embora a resposta de Ken White à variável PATHEXT (no "ambiente" do prompt de comando) seja uma resposta agradável e curta, e essa resposta possa funcionar bem para você, a resposta está incompleta. O motivo está incompleto é que a resposta correta é diferente com base no que você está tentando fazer.

Por exemplo, você pode tentar:

  • Execute um programa a partir de um "prompt de comando tradicional" ("CMD"), digitando seu nome de arquivo completo
  • Execute um programa a partir de um "prompt de comando tradicional" ("CMD"), digitando o nome do arquivo base, mas deixando sua extensão
  • Use o comando "start" incorporado ao "prompt de comando tradicional" ("CMD")
  • Execute um programa do PowerShell
  • Execute um programa a partir do item de menu "Executar", encontrado no menu Iniciar.
  • Execute um programa no Explorer, tentando clicar duas vezes em um ícone relacionado a um arquivo que termina com a extensão
  • Diga ao Microsoft Internet Explorer para abrir um arquivo baixado
  • Execute um programa usando uma função da API do Microsoft Windows. (Isso é algo que os usuários finais normalmente não fazem, mas os programadores de computador podem fazer isso e, portanto, as informações são relevantes para eles.)

Alguns desses métodos de execução de programas podem usar métodos diferentes para determinar quais extensões de nome de arquivo podem ser suportadas. Em particular, o uso do CMD pode ser diferente do menu Executar.

Por exemplo, o intrigante blog de Wes: Customizing Windows Run Command ... observa diferentes locais sendo verificados, incluindo a chave do registro.

A resposta também pode depender de qual versão do Microsoft Windows está sendo usada. No Windows 10, digitei o nome de um arquivo zip em um prompt de comando e ele abriu o Windows Explorer. Lembro-me de que não estava funcionando no Windows XP (embora no Windows XP eu pudesse digitar "start filename.zip" e obter o mesmo tipo de efeito). Portanto, minha memória está com defeito ou a Microsoft está tentando fazer melhorias nas versões mais recentes do Windows. (Felizmente, para mim, o último.)

No prompt de comando tradicional do Windows 10 (executando "CMD"), quando eu for para o local (usando o comando "CD") de um arquivo zip e digite "filename.zip", o arquivo será aberto. Quando vou para esse local e digite "filename" (excluindo a extensão de arquivo ".zip"), o Windows não encontra o arquivo. No entanto, se eu executar " ECHO %PATHEXT%" e depois " SET PATHEXT=%PATHEXT%;.ZIP" (e depois " ECHO %PATHEXT%" novamente, para garantir o efeito desejado), digite "filename" e o prompt de comando encontrará o arquivo .ZIP. Portanto, esse é o efeito da variável% PATHEXT%.

Você pode ver outra lista de extensões executando o ASSOCcomando Por exemplo, a execução desse comando mostra várias linhas de saída, incluindo as seguintes (no meu sistema) - " .zip=CompressedFolder". Então, posso ver o que é executado digitando " FTYPE | FIND /I "CompressedFolder"". (Isso é destinado à linha de comando tradicional. O PowerShell não gosta dessas aspas sem escape.) (Se você digitar " FTYPE" sem o restante dessa linha de comando, verá um pouco mais de saída sobre outras extensões.)

Se eu digitar " ASSOC | FIND /C "."", no meu computador com Windows 10, descobri que tenho 339 linhas de saída ao verificar associações de arquivos dessa maneira.

O MS KB 162059 trata de ajustar como o Internet Explorer abre documentos do Office.

Portanto, pedir a lista de executáveis ​​padrão é muito vago. Diferentes componentes do Microsoft Windows podem usar recursos diferentes; portanto, a pergunta precisa ser mais específica para obter uma resposta precisa.

A pergunta mencionou o uso do Explorer para clicar duas vezes em um ícone. Para ver a lista de executáveis ​​usados ​​por isso, acredito que você queira verificar o registro. Você pode executar isso em um prompt de comando:

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

(Não vou listá-los aqui. Existem 286 deles no meu computador com Windows 10.)

Isso lista as extensões. Para ver mais informações, incluindo detalhes sobre as extensões:

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

Então, como você pode ver até agora, essa pergunta aparentemente inocente pode realmente ser um tópico bastante complexo. Acredito que afirmei por que uma pergunta deve ser bastante específica para poder obter uma resposta completa que aborde totalmente como um único componente do Windows pode determinar as extensões de nome de arquivo. Em poucas palavras, não há apenas uma resposta para o Windows, pois o Windows possui vários componentes que se comportam de maneiras diferentes. Espero ter começado a mostrar isso e apontado para alguns recursos adicionais que mostram informações relevantes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.