Node.js 在后台模式下从节点执行VBS(任务计划程序或Windows服务)

Node.js 在后台模式下从节点执行VBS(任务计划程序或Windows服务),node.js,vbscript,child-process,background-task,Node.js,Vbscript,Child Process,Background Task,我正在尝试将Excel文件从NodeJS应用程序转换为PDF。当我在命令行中启动Node时,它可以工作,但当我通过NSSM或直接使用Tasks Scheduler以Windows服务的形式启动app.bat时,它就不再工作了 使用下面的脚本,我只能看到log.txt中的第一行,这是程序参数。如果一切顺利,我会看到0,然后是1和2。遗憾的是,当节点在后台运行时,我没有任何数字,所以我猜问题是CreateObject(“Excel.Application”),但我不知道为什么以及如何解决它 VBSc

我正在尝试将Excel文件从NodeJS应用程序转换为PDF。当我在命令行中启动Node时,它可以工作,但当我通过NSSM或直接使用Tasks Scheduler以Windows服务的形式启动app.bat时,它就不再工作了

使用下面的脚本,我只能看到log.txt中的第一行,这是程序参数。如果一切顺利,我会看到0,然后是1和2。遗憾的是,当节点在后台运行时,我没有任何数字,所以我猜问题是
CreateObject(“Excel.Application”)
,但我不知道为什么以及如何解决它

VBScript:

Set objFSO=CreateObject(“Scripting.FileSystemObject”)
outFile=“C:\Users\admin\Documents\Projects\tools\log.txt”
设置objFile=objFSO.CreateTextFile(outFile,True)
objFile.Write Wscript.Arguments.Item(0)&“|”&Wscript.Arguments.Item(1)&vbCrLf
暗色oExcel
设置oExcel=CreateObject(“Excel.Application”)
Dim oBook
objFile.Write“0”和vbCrLf
设置oBook=oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
objFile.Write“1”和vbCrLf
oBook.ExportAsFixedFormat xlTypePDF,WScript.Arguments.Item(1)
objFile.Write“2”和vbCrLf
好的,接近真值
NodeJS:

const{exec}=require('child_进程');
exec(“”+Meteor.settings.directories.tools+“convertToPDF.vbs”“”+outputServerFilePathChild+“.xlsx”“”+outputServerFilePathChild+”.pdf“,(err,stdout,stderr)=>{
如果(错误){
控制台日志(stderr);
拒绝(新错误(stderr));
}否则{
if(fs.existsSync(outputServerFilePathChild.replace(//g,“%20”)+“.pdf”)){
console.log('rename“'+outputServerFilePathChild.replace(//g,“%20”)+'.pdf“'+outputServerFilePathChild+'.pdf“);
exec(‘重命名’+outputServerFilePathChild.replace(//g,“%20”)+'.pdf”“+outputServerFilePathChild+'.pdf”“,(err,stdout,stderr)=>{
log(“生成的文件:“+outputServerFilePathChild+”.pdf”);
解析(outputClientFilePathChild+“.pdf”);
});
}否则{
log(“生成的文件:“+outputServerFilePathChild+”.pdf”);
解析(outputClientFilePathChild+“.pdf”);
}
}
});
我也试过这样的方法:

const child2=spawn('start'[
“PDFConverter”,
“cscript”,
“'C:\\Users\\admin\\Documents\\Project\\tools\\convertToPDF.vbs”,
“C:\\Users\\admin\\Documents\\Project\\reports\\admin\\rebates\\customer1 2019-09-30.xlsx”,
“C:\\Users\\admin\\Documents\\Project\\reports\\admin\\rebates\\customer1 2019-09-30.pdf”
], {
壳牌:是的,
windowsHide:是的,
});
然而,它也不起作用。有人有主意吗

编辑:这个问题似乎无法解决。很多年前,有些人问过同样的问题,但仍然没有答案

    • 我找到了答案(但这不是真正的解决方案)。正如我所猜测的,这个问题与Excel有关,因此它不是VBScriptNodeJS。我用EdgeJs在C#中做了同样的事情,我也有同样的问题

      您可以使用其库编辑/创建打开的XML文件,但不能以PDF格式保存或在服务器模式下使用任何宏

      Microsoft回答:

      如果使用服务器端解决方案中的Office应用程序,则 应用程序将缺少许多运行所需的功能 成功

      CreateObject函数和CoCreateInstance函数返回一个 以下运行时错误消息之一,无法为启动 自动化。。。 ... ... ...


      我还尝试了winax(使用节点ffi的节点插件),结果相同。它可以在客户端模式下工作,但不能在服务器模式下工作(DispInvoke:Open Microsoft Excel无法访问该文件)。

      您的错误可能出现在
      objFile.Write Wscript.Arguments.Item(0)&“|”&Wscript.Arguments.Item(1)&vbCrLf
      行上,可能是命令行参数没有写入脚本。设置oExcel=CreateObject(“Excel.Application”)很好。在log.txt中,我写了第一行,并添加了这一行来调试脚本。它以前不工作,这就是我添加这些行的原因。所以问题不在这里,我可以证实这一点。我曾经运行我的excel VBA自动发送电子邮件,并通过Windows 7中的任务调度器发送另一个nodejs脚本调用的VBS自动。但是在升级到Windows10之后,由于您在文章中提到的错误,现在一切都失败了。如果我手动调用脚本或打开excel文件,一切正常。我将尝试制作一个nodejs程序,让它永远运行,以便为我触发这些脚本。让我知道你是否试过,是否有效?这也许能帮我省点力气。