You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Node.js中获取Windows已知文件夹路径(如CSIDL_COMMON_APPDATA)

如何在Node.js(Windows)中获取CSIDL_COMMON_APPDATA/FOLDERID_ProgramData路径

完全不用写C扩展,也不用硬编码,这里有几个简单可靠的方法:

方法1:直接读取系统环境变量(无依赖,推荐)

Windows系统本身就把FOLDERID_ProgramData的路径存在PROGRAMDATA环境变量里,你可以直接通过Node.js的process.env获取:

const programDataPath = process.env.PROGRAMDATA;
console.log(programDataPath); // 输出类似 C:\ProgramData

这个方法最直接,不需要安装任何第三方包,而且完全符合系统规范,不会因为系统路径变更出问题。

方法2:用跨平台npm包(适合多平台项目)

如果你需要同时支持Windows、macOS、Linux等系统,推荐使用env-paths这个包,它会根据不同系统返回对应的标准路径,在Windows上就会返回ProgramData的路径:

  1. 先安装包:
npm install env-paths
  1. 代码示例:
const envPaths = require('env-paths');
// 传入你的应用名称,会在对应路径下创建应用专属子目录
const appPaths = envPaths('MyNodeApp');
console.log(appPaths.commonData); // Windows下输出 C:\ProgramData\MyNodeApp

这个包的好处是帮你处理了跨平台的路径差异,不用自己写判断逻辑。

方法3:通过注册表查询(备选方案)

如果出于某些原因不想用环境变量,还可以通过Windows注册表查询获取路径,用Node.js的child_process执行命令即可:

const { execSync } = require('child_process');

try {
  // 查询注册表中Common AppData的路径
  const regOutput = execSync(
    'reg query "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" /v "Common AppData"',
    { encoding: 'utf8' }
  );
  // 解析命令输出,提取路径
  const programDataPath = regOutput.split(/\s+/).pop();
  console.log(programDataPath);
} catch (error) {
  console.error('获取路径失败:', error.message);
}

不过这个方法需要你的程序有读取注册表的权限,不如前两种方法简洁,只推荐在特殊场景下使用。


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

火山引擎 最新活动