【发布时间】:2014-07-24 04:45:31
【问题描述】:
我正在尝试从节点打开文件,如果我尝试使用此代码打开它们,那么它可以工作
exec("excelfile.xls", {cwd: "c:\\"}, function(error, stdout, stderror){
if(error)console.log("Error: \""+stderror+"\"");
});
但是,我正在尝试调整程序以作为服务运行,而让我的程序在作为服务运行时打开文件的唯一方法是使用 spawn 而不是 exec:
var child = spawn("explorer.exe",[], {env: process.env, cwd: "C:\\Windows"});
child.unref();
问题是,如果我尝试生成不可执行的内容,则会收到 ENOENT 错误,因为节点不知道要使用什么程序来打开文件:
var child = spawn("excelfile.xls",[], {env: process.env, cwd: "c:\\"});
child.unref();
我正在寻找的是一种提取正确程序以从 Windows 中打开给定文件类型的方法(以及该程序的路径)。
我尝试使用 winreg 从注册表中获取信息,但要做到这一点,我需要查找 computer\HKEY_CLASSES_ROOT."fileExtension"\ 并从 "(Default)" 字符串值中获取值,然后我可以查找 computer\HKEY_CLASSES_ROOT\"(Default) value"\shell\Open\command\ 并获取我需要打开文件的字符串。
不幸的是,winreg 似乎没有为您提供(默认)字符串的值。
var Winreg = require('winreg');
var regKey = new Winreg({
hive: Winreg.HKCR,
key : "\\.xls"
})
regKey.values(function (err, items) {
if (err)
console.log('ERROR: '+err);
else
for (var i in items){
console.log('ITEM: '+items[i].name+'\t'+items[i].type+'\t'+items[i].value);
}
});
输出
项目:内容类型 REG_SZ application/vnd.ms-excel
预期输出
项目:(默认)类型 REG_SZ Excel.Sheet.8
项目:内容类型 REG_SZ application/vnd.ms-excel
因此,如果有人可以给我一种使用 child_process.spawn() 打开非可执行文件的方法 或者给我一种方法来提取正确程序的路径以根据文件的扩展名打开文件,我将不胜感激。
【问题讨论】:
标签: javascript windows node.js