Javascript 如何在node.js中找到打开给定文件类型的正确程序?

Javascript 如何在node.js中找到打开给定文件类型的正确程序?,javascript,windows,node.js,Javascript,Windows,Node.js,我正在尝试从节点打开文件,如果我尝试使用此代码打开它们,那么它会工作 exec("excelfile.xls", {cwd: "c:\\"}, function(error, stdout, stderror){ if(error)console.log("Error: \""+stderror+"\""); }); 但是,我正在尝试将程序调整为作为服务运行,并且当程序作为服务运行时,使其打开文件的唯一方法是使用spawn而不是exec: var child = spawn("expl

我正在尝试从节点打开文件,如果我尝试使用此代码打开它们,那么它会工作

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();
问题是,如果我尝试生成一些不可执行的文件,则会出现一个错误,因为node不知道使用什么程序打开文件:

var child = spawn("excelfile.xls",[], {env: process.env, cwd: "c:\\"});
child.unref();              
我要寻找的是一种从windows中提取正确程序以打开给定文件类型(以及该程序的路径)的方法

我尝试使用winreg从注册表获取信息,但要做到这一点,我需要查找computer\HKEY\U CLASSES\u ROOT.“fileExtension”\并从“(Default)”字符串值中获取值,然后我可以查找computer\HKEY\U CLASSES\u ROOT\“(Default)value”\shell\Open\command\并获取打开文件所需的字符串

不幸的是,winreg似乎没有为您提供(默认)字符串的值

输出

项目:内容类型REG_SZ应用程序/vnd.ms-excel

预期产出

项目:(默认)键入REG_SZ Excel.Sheet.8
项目:内容类型REG_SZ应用程序/vnd.ms-excel

所以如果有人能给我一种方法,用child_process.spawn()打开一个不可执行的文件 或者给我一种方法来提取正确程序的路径,以便根据文件的扩展名打开文件。我非常感激。

您可以尝试使用命令

我的完整代码:

var EventLogger = require('node-windows').EventLogger;
var log = new EventLogger('File Launcher starting');
var exec = require('child_process').exec;
var userName = "mike";
var password= "mikesPassword";
var fullPath= "C:\folder\file.xls";

exec("PSExec.exe -accepteula -h -d -u "+userName+" -p "+password+" -i 1   C:\\WINDOWS\\SYSTEM32\\CMD.EXE /c start \"\" \""+fullPath+"\"",{cwd: process.cwd},      function(error, stdout, stderror) {
    if(error){
        log.error(stderror.replace('\n','').replace('\r',''));
    }
    if(stdout){
        log.info(stdout.replace('\n','').replace('\r',''));
    }
});

感谢这是非常有帮助的,我没有想到使用'开始',最后我需要使用PsExec启动cmd.exe,否则程序将作为系统启动。
var child = spawn("cmd.exe", ["/c", "start", "excelfile.xls"], {env: process.env, cwd: "c:\\"});
child.unref();  
var EventLogger = require('node-windows').EventLogger;
var log = new EventLogger('File Launcher starting');
var exec = require('child_process').exec;
var userName = "mike";
var password= "mikesPassword";
var fullPath= "C:\folder\file.xls";

exec("PSExec.exe -accepteula -h -d -u "+userName+" -p "+password+" -i 1   C:\\WINDOWS\\SYSTEM32\\CMD.EXE /c start \"\" \""+fullPath+"\"",{cwd: process.cwd},      function(error, stdout, stderror) {
    if(error){
        log.error(stderror.replace('\n','').replace('\r',''));
    }
    if(stdout){
        log.info(stdout.replace('\n','').replace('\r',''));
    }
});