This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
IDE 检查与版本检查方案
工具箱需要合理、高效的方案来检查有没有安装各 IDE, 以及已安装 IDE 的版本和最新版本。
已安装 IDE 检查方案
where.exe
Windows 提供 where 命令来在系统的环境变量中查找指定名称的可执行文件或脚本。对于 PowerShell, 命令是 where.exe。
例如,使用 where.exe code 可以查找 VSCode 的可执行路径,继而能够确认已安装 VSCode。如果没有找到, 该命令会报错, 即可确认没有安装 VSCode。
该方案需要已将 IDE 的安装目录配置到环境变量。VSCode 安装程序会自动完成配置,但 JetBrains IDEs 的独立安装程序似乎不会,因此该方案对 JetBrains IDEs 的查找能力有限。
JBTState.json
是我自己起的名字,是 JetBrains Toolbox state.json 的简称。
JetBrains Toolbox 是 JetBrains 推出的 JetBrains IDEs 管理工具, 如其名。Toolbox 会在你的 Windows 用户数据目录下保存数据,其中名为 state.json 的文件中存储了由 Toolbox 管理的 JetBrains IDEs 的数据。
具体来说,我通过以下代码获取这个文件的存在路径:
每当 Toolbox 安装、更新、卸载 JetBrains IDE 时,这个文件都会由 Toolbox 更新。因此,从此文件可以准确地检查已安装的 JetBrains IDEs。
JetBrains 小品一则
在安装 JetBrains Toolbox 和任意 JetBrains IDE 之后,例如 IntelliJ IDEA, 然后运行 where.exe idea,你将得到 IDEA 的可执行路径。这是 Toolbox 在数据目录下维护的 JetBrains IDEs 启动脚本, Toolbox 会将脚本目录添加到系统环境变量中,从而允许你像使用 code . 一样使用 idea .,或其他 JetBrains IDEs。
因此,在安装 JetBrains Toolbox 之后,where.exe 方案也对 JetBrains IDEs 有效了。
全盘查找
开发中。
IDE 版本检查方案
检查已安装的 IDE 的版本与对应的最新版本,从而判断是否可以更新。检查过程不可避免地需要访问网络接口。
Visual Studio Code
VSCode 的版本列表接口为 https://update.code.visualstudio.com/api/releases/stable。接口返回一个简单的字符串列表,每一项都是 VSCode 版本号,其中第一个就是最新版本了。
然后,只需要通过 code --version,从输出中提取已安装版本号。
JetBrains IDEs
JetBrains IDEs 的版本数据接口为 https://data.services.jetbrains.com/products。该接口返回的数据非常庞大且复杂,并且没有接口文档。
根据经验,传递查询参数 type=release 可以只获取正式版的版本数据,code=IU 可以只获取 IDEA 的版本数据,其他参数组合暂不知晓。
然后,想要获取已安装的 JetBrains IDEs 的版本则存在困难。
如果使用 JetBrains Toolbox, 那么 state.json 中会记录每个 JetBrains IDE 的版本。
否则,需要前往每个 JetBrains IDE 的安装目录,读取其中的数据文件,或以 --version 参数调用其中的脚本 。
JetBrains Toolbox 生成的脚本无法通过传入 --version 来获取版本 。
我不久前曾就 idea --version 无输出这个问题咨询过 JetBrains 的支持人员 。
当然, 这是设计如此。idea64.exe 是图形界面启动器。它不处理 --version, 所以你看不到任何输出。
支持的 CLI 入口点是脚本( idea.bat、webstorm.bat、pycharm.bat 等),这些是用于 --version、inspect、warmup 等操作的设计目标。这就是为什么 .\idea.bat --version 可以工作,而 .\idea64.exe --version 是静默的。
而由 Toolbox 生成的 cmd 启动脚本不支持 --version 参数则更多是因为 Toolbox 本身就完全支持版本查看、管理与回滚。这在一定程度上有些困扰吧。