You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Electron/Node.js中获取可打开指定文件类型的已安装程序列表?

获取可打开指定文件类型的已安装程序列表(Electron/Node.js)

要在Electron应用中获取能打开特定文件类型的已安装程序列表,需要针对不同操作系统做适配——各系统的应用关联存储机制差异较大,以下是具体实现思路:

Windows系统

Windows的文件类型关联信息存放在注册表中,可借助Node.js的regedit库读取对应键值:

  1. 先获取目标文件扩展名对应的ProgID(比如.txt对应的txtfile)
  2. 读取该ProgID下shell节点的所有子项,即可拿到所有关联的打开程序;也可通过HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications遍历所有已注册应用,再匹配支持的文件类型
  3. 示例代码片段:
const regedit = require('regedit');

// 获取.txt文件关联的ProgID
regedit.list('HKCR\\.txt', (err, result) => {
  if (err) throw err;
  const progId = result['HKCR\\.txt'].values[''].value;
  // 获取该ProgID对应的所有打开方式
  regedit.list(`HKCR\\${progId}\\shell`, (err, result) => {
    if (err) throw err;
    const availableApps = Object.keys(result[`HKCR\\${progId}\\shell`].keys);
    console.log('可用打开程序:', availableApps);
  });
});

macOS系统

macOS的应用关联信息存储在Launch Services数据库中,可通过系统命令lsregister查询:

  • 用child_process调用系统命令,传入参数获取指定文件类型的关联应用
  • 示例代码片段:
const { exec } = require('child_process');

const targetFile = '/path/to/your/file.txt';
// 查询支持打开该文件的应用
exec(`/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -A 10 -B 5 "${targetFile}"`, (err, stdout) => {
  if (err) throw err;
  console.log('可用打开程序:', stdout);
});

也可通过AppleScript调用NSWorkspace的API来获取,逻辑更贴近系统原生机制。

Linux系统

Linux的文件关联主要通过xdg-mime工具管理:

  1. 先用xdg-mime query filetype <文件路径>获取目标文件的MIME类型
  2. 再用xdg-mime query handlers <MIME类型>获取所有支持该类型的应用
  3. 示例代码片段:
const { exec } = require('child_process');

// 先通过xdg-mime获取文件对应的MIME类型,这里以text/plain为例
const mimeType = 'text/plain';
exec(`xdg-mime query handlers ${mimeType}`, (err, stdout) => {
  if (err) throw err;
  const availableApps = stdout.trim().split('\n');
  console.log('可用打开程序:', availableApps);
});

第三方库简化操作

如果不想自己处理跨系统逻辑,可使用现成的第三方库减少重复工作:

  • file-type:快速获取文件的MIME类型,辅助后续查询
  • winreg:Windows注册表操作的轻量封装库
  • xdg-utils:针对Linux的xdg工具封装

注意:Electron中执行系统命令、访问注册表等操作需要在主进程中完成,可通过IPC通信将结果传递给渲染进程,供用户选择使用。


内容的提问来源于stack exchange,提问作者theahura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:10:36