Como o diálogo Executar sabe onde estão os aplicativos?

71

Como usuário experiente, uso freqüentemente a caixa de diálogo Executar.

Eu posso entender porque os seguintes comandos funcionam, como eles estão no PATH variável de ambiente.

mspaint
diskmgmt.msc
explorer

Esses comandos também funcionam no CMD.

Os comandos abaixo funcionam na execução, mas eles não estão no PATHe eles não funcionam no CMD.

firefox
winword
iexplore

Como o Run sabe onde esses arquivos estão?

mt025
fonte

Respostas:

89

Quando você executa um comando do diálogo Executar, o sistema examina App Paths chave do registro aqui:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

e

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

EXEMPLO

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\filezilla.exe

(default) dados de valor têm o caminho completo para o executável.

Se não for encontrado, ele olha para cada pasta incluída no PATH.

Considerando que o Prompt de Comando não faz referência a essas chaves de registro. Ele procura apenas o PATH.

Win32Guy
fonte
5
Ah, isso provavelmente explica por que você não pode ter vários programas com o mesmo nome de trabalho como abrir com opções. Projeto pobre.
curiousdannii
2
Sim quase. Mas abrir com diálogo lê de HKCR\Applications e RegisteredApplications
Win32Guy
4
A Microsoft forneceu um vídeo sobre isso: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths
magicandre1981
6
Você pode, claro, usar o start embutido que pesquisa os caminhos do aplicativo.
Neil
1
Isso é muito bem documentado aqui . Eu também expliquei como o cmd faz sua pesquisa Aqui - é um caso especial diferente das APIs do Win32.
Bob
4

A resposta de w32sh corretamente aponta que as chaves extras pesquisadas pelo diálogo Executar estão aqui:

  • Caminho HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App \
  • Caminho HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App \

Há sim documentação oficial para esses caminhos .

Um fato importante sobre essas chaves é que o nome da chave (por exemplo, "filezilla.exe") não precisa corresponder ao caminho completo de forma alguma. No Windows 7, o valor pode até ser uma linha de comando simples, semelhante ao que pode ser usado como o "destino" de um atalho.

Por exemplo, eu costumava ter isso no meu registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="\"C:\\WINDOWS\\system32\\javaw.exe\" -Xms24M -Xmx512M -jar \"C:\\Program Files\\jEdit\\jedit.jar\" -reuseview"

Não consigo fazer isso funcionar no Windows 10, mas você ainda pode apontar para qualquer arquivo, incluindo um arquivo em lote, por exemplo,

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="C:\\Program Files\\jEdit\\run-jedit.bat"

Isso permite que você digite "jedit" ou "jedit C: \ foo \ bar \ algo.txt" para executar a JVM com opções apropriadas e iniciar / reutilizar jEdit .

Tanto quanto eu posso ver, o nome da chave deve terminar em ".exe", para criar um alias de "abc", você cria uma chave "abc.exe", mesmo que não esteja apontando para um arquivo ".exe" .

IMSoP
fonte
Não funciona aqui se eu usar switches adicionais após o nome do arquivo executável.
Win32Guy
@ w32sh Hm, eu acho que mudou no Win 10 :(
IMSoP
-1

Existe uma variável de ambiente chamada PATH ou% PATH% na linha de comando. Ele contém uma série de locais para pesquisar.

Garhoogin
fonte