diff --git a/Problem-IDECheckAndVersion.md b/Problem-IDECheckAndVersion.md index 961fe5f..02a825e 100644 --- a/Problem-IDECheckAndVersion.md +++ b/Problem-IDECheckAndVersion.md @@ -12,4 +12,4 @@ IDE 卡片中,蓝色的框是该 IDE 的可执行路径。对于 `where.exe` 更新完成后,Toolbox 会重新完整保存数据,此后工具箱理论上也将恢复正常。 -这是 `JBTState.json` 方法的原理所致。 \ No newline at end of file +这是 `JBTState.json` 方法的原理所致,详请查看 [IDE 检查与版本检查方案](/Solution-IDECheckAndVersion.md)。 \ No newline at end of file diff --git a/Solution-IDECheckAndVersion.md b/Solution-IDECheckAndVersion.md new file mode 100644 index 0000000..e0886ec --- /dev/null +++ b/Solution-IDECheckAndVersion.md @@ -0,0 +1,64 @@ +# 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](https://www.jetbrains.com.cn/toolbox-app/) 是 JetBrains 推出的 JetBrains IDEs 管理工具,如其名。Toolbox 会在你的 Windows 用户数据目录下保存数据,其中名为 `state.json` 的文件中存储了由 Toolbox 管理的 JetBrains IDEs 的数据。 + +![](/images/JetBrainsToolbox-UpdatingIDE.png) + +具体来说,我通过以下代码获取这个文件的存在路径: + +```typescript +const JETBRAINS_TOOLBOX_STATE_JSON_PATH = path.join( + os.homedir(), + 'AppData/Local/JetBrains/Toolbox/state.json' +) +``` + +每当 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` 来获取版本**。 diff --git a/_Sidebar.md b/_Sidebar.md index 9387419..62db25c 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -1,5 +1,7 @@ * [百科主页](/Home.md) * **结构** * [基本 Electron 架构](/Structure-BasicElectronApp.md) +* **方案** + * [IDE 检查与版本检查](/Solution-IDECheckAndVersion.md) * **问题** * [IDE 检查与版本检查](/Problem-IDECheckAndVersion.md)