将可执行文件加入环境变量Path的新姿势——ShimGen

  日常使用 Windows 系统时,如果需要在命令行中直接使用程序,则需要把程序的目录加到环境变量 Path 中,而很多时候,程序目录其实会包含很多程序的依赖文件,或者其他不适合在 Path 中的文件,每当有这种需求的时候都添加一条新的路径到 Path 中也不大友好,那么,如何操作,才能优雅又简单呢?

  下面我借鉴 Windows 平台的老牌包管理工具 Chocolatey ,使用其内置的工具 ShimGen 来解决这个问题。

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

Chocolaty 添加环境变量原理分析

首先我们看一下 Chocolaty 是如何处理安装的不同包的可执行文件的环境变量操作的呢?
查看环境变量中 PATH 变量,可以很容易的找到其中 Chocolatey 的条目:

打开变量指向的目录查看(C:\ProgramData\chocolatey\bin

发现都是各种 exe 可执行文件。
PS:此时文件夹中还没有 wget.exe 的执行文件。

下面我们安装常用 HttpGet 请求工具 wget

通过 Chocolatey 的日志,可以简单推断出,针对 wget 这种压缩包为程序包的程序,整个安装过程如下:

  1. 下载程序的压缩包。
  2. 解压到 Chocolatey Tools 目录(可以配置,当前为 C:\ProgramData\chocolatey\lib\)。
  3. 使用 ShimGen 创建 wget.exe 到已配置环境变量的目录(C:\ProgramData\chocolatey\bin)

ShimGen?ShimGen!

ShimGen 是 Chocolatey 曾经开源的一个工具,虽然按照协议,它只能被用于 Chocolatey,或者如果是开源项目,可以申请获取许可,但我是自己使用,而且我同时使用了Chocolatey,暂时就就不管那么多了,后期我考虑自己重写一个类似的程序。

请不要商业使用 ShimGen,防止法律风险。

ShimGen 是什么?

详细介绍可以看这里,这里截取部分。

简而言之,就是可以用 ShimGen 来创建一个代理一样的链接可执行程序文件,完美满足我们的需求。
为了便于称呼,下文里我们会把生成后的文件称为代理可执行文件

使用方法

找到 shimgen.exe 对应的文件夹,即 Chocolatey 安装目录下的 tools 文件夹。

1
.\shimgen.exe --help

模仿游戏

对于 Chocolatey 没有的软件包,或者我们希望自定义安装路径的包(Chocolatey 免费版本不支持自定义安装路径),我们也可以模仿 Chocolatey 的模式。

建立环境变量文件夹

首先,自己建立一个环境变量文件夹,用来安放 ShimGen 生成的代理可执行文件。我选择了目录 D:\ProgramData\Bin

使用 ShimGen 生成 ShimGen 的代理可执行文件

注意:源文件路径请使用绝对路径

1
2
cd C:\ProgramData\chocolatey\tools\
.\shimgen.exe -p C:\ProgramData\chocolatey\tools\shimgen.exe -o D:\ProgramData\Bin\shimgen.exe --debug

测试效果

新开一个控制台,这时候运行命令

1
shimgen --help

成功!

欢迎关注我的其它发布渠道