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',''));
}
});