当前位置: 代码迷 >> 综合 >> [总结] windowsXP - 如何根据环境变量找文件?
  详细解决方案

[总结] windowsXP - 如何根据环境变量找文件?

热度:99   发布时间:2024-01-20 13:19:05.0

对于path这个环境变量,我们是用的最多的,这里以此为例:

 

假如我们在cmd中输入一个link.exe,系统是如何找到正确的link.exe执行的?

 

这个问题我一直想找到精确的答案,目前却只获取到整个链条中的几段。

 

下面描述我试图一窥全貌的过程,希望大家能补充缺失的环节,使这条链子串起来。

 

 

+ 所知片段1

找寻的第一步——先在当前目录下找(这步应该没错,我可以确信)

如果在当前目录下找到了link.exe,那么直接执行这个可执行文件,无需再继续找寻。

 

 

+ 所知片段2

如果在当前目录下没有找到,系统会去一种叫环境变量的地方找寻path这个变量,进而从中获取一些路径。

拿到这些路径,系统会按照某种顺序,从这些地方挨个查找link.exe:

找到就马上执行之,不再继续查找;否则继续往下找,直至找完所有路径。

 

问题来了:

 - 疑问1. 什么是环境变量?

 - 疑问2. 环境变量里的值从哪里来?最终提供给程序的值是如何确定的?

 - 疑问3. 对于获取到“一些路径”,系统将按照何种顺序依次进行找寻?

 


+ 所知片段3疑问1


什么是环境变量?

Environment variables are specially named aliases or placeholders for certain basic system properties that are present for convenience in programming and in system administration。

-- from Environment Variables in Windows XP

意译一下:

环境变量是一组特殊的变量(这里别名/标志符我就直接译为变量了)
它们保存了一些系统的基本属性
这些属性一般用来为程序或系统管理员提供便利

环境变量里面存储的一般是一些路径,文件名,系统参数值等信息
当程序需要这些值时,就可去问询环境变量

环境变量既然能够为程序提供信息,就可以影响程序的行为
比如开始的例子里,command程序执行link.exe,若本目录下未找到link.exe,它接下来的行为就受到了环境变量的影响


一个约定:

为了和下面可能讨论到的其他环境变量相区别,我们把这里所谓的“可影响程序行为的环境变量”称为“最终环境变量”.

后文形形色色的其他也叫“环境变量”的东西,我们姑且认为是“影响最终环境变量”的参数。


程序运行时,如何得知当前程序可利用哪些环境变量?这些变量里的值是什么?

对于一般的程序,应该有相应的API可获取这些值,我不太清楚,这里做个记号以后补上。【mark】
对于批处理程序,可以通过windows提供的set工具来输出此时作用这个批处理程序的所有环境变量以及其中的值。

例如:
-------------

【mark】这里待补充一个例子

---------------



+ 所知片段4疑问

  相关解决方案