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


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 em 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?


69


origem




Respostas:


Quando você executa um comando na caixa de 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.


89



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
Sim quase. Mas abrir com diálogo lê de HKCR\Applications e RegisteredApplications - Win32Guy
A Microsoft forneceu um vídeo sobre isso: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths - magicandre1981
Você pode, claro, usar o start builtin que procura os caminhos do aplicativo. - Neil
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


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 nenhuma maneira. 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" .


4



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


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


-1