作为高级用户,我经常使用运行对话框。
我可以理解为什么以下命令有效,因为它们在PATH
环境变量中。
mspaint
diskmgmt.msc
explorer
这些命令在 CMD 中也有效。
下面的命令在运行中有效,但在中无效PATH
,并且在 CMD 中无效。
firefox
winword
iexplore
Run 如何知道这些文件在哪里?
答案1
当您从运行对话框执行命令时,系统会查看App Paths
此处的注册表项:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
例子
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\filezilla.exe
(default)
值数据具有可执行文件的完整路径。
如果未找到,它会查看 PATH 中包含的每个文件夹。
而命令提示符不会引用这些注册表项。它只搜索 PATH。
答案2
w32sh 的回答正确指出运行对话框搜索的额外键在这里:
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\应用程序路径\
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\应用程序路径\
关于这些键的一个重要事实是,键的名称(例如“filezilla.exe”)不必以任何方式与完整路径匹配。在 Windows 7 下,该值甚至可以是一个简单的命令行,类似于可以用作快捷方式的“目标”的内容。
例如,我曾经在我的注册表中有这个:
[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"
我似乎无法在 Windows 10 中完成这项工作,但你仍然可以指向任何文件,包括批处理文件,例如
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="C:\\Program Files\\jEdit\\run-jedit.bat"
这允许您键入“jedit”或“jedit C:\foo\bar\something.txt”以使用适当的选项运行 JVM 并启动/重用j编辑。
据我所知,键名必须以“ .exe ”结尾,因此要创建“ abc ”的别名,您需要创建一个键“ abc.exe ”,即使它不是指向“ .exe ”文件。
答案3
命令行中有一个环境变量,称为 PATH 或 %PATH%。它包含一系列要搜索的位置。