在经典的asp中从wscript.run执行nodejs命令

时间:2013-06-12 04:46:45

标签: node.js asp-classic vbscript wsh

我正在尝试从vbscript / classic asp页面执行nodejs命令。我从lessc(较少的编译器)开始,但也需要使用其他命令。

安装了nodejs,我在全局命名空间中安装了lessc(例如npm install -g less)我可以(在服务器cmd提示符下)发出lessc并且它可以工作。

在服务器命令提示符下,我可以发出执行lessc的命令,例如:

lessc D:\webs\player\Layout\less\app.less > D:\webs\player\Layout\less\app.css

但是当我在vbscript中执行它时:

dim path : path = "D:\webs\player\Layout\less\"
dim shell : shell = server.createobject("WScript.Shell")
dim errCode : errCode = shell.Run("lessc " & path & "\app.less > " & path & "\app.css", 0, true)
response.write errCode
然后它什么也没做。替换命令使其在lessc之前运行CMD向前迈出一步:它创建一个零字节输出文件(app.css):

dim errCode : errCode = shell.Run("CMD /C lessc " & path & "\app.less > " & path & "\app.css", 0, true)

所以看起来它没有找到lessc,即使它是在路径变量中定义的;服务器命令提示符下的ECHO %PATH%显示lessc所在的路径。所以我尝试执行lessc的完整路径,即使这似乎不起作用(没有错误,没有输出):

dim errCode : errCode = shell.Run("CMD /C C:\Users\Administrator\AppData\Roaming\npm\lessc " & path & "\app.less > " & path & "\app.css", 0, true)

..现在很沮丧..我尝试将lessc本身的输出传递给一个文件,然后输出一个零字节文件。所以它正在做某事,只是没有执行lessc。

call shell.Run("CMD /C C:\Users\Administrator\AppData\Roaming\npm\lessc > c:\temp\lessc.txt", 0, true)

究竟如何让路径变量在shell.run中运行?是否有更好的方法从vbscript / classic asp执行nodejs命令服务器端?它将成为我在使用IIS时总是忘记的那些愚蠢的小事之一,不是吗?

1 个答案:

答案 0 :(得分:2)

好吧,经过一天的讨论之后,我遇到了一个github项目,它有一个压缩节点,而且作为一个独立的包很少用,只需使用Shell.Run即可轻松执行,而且你不必捣乱完全没有环境变量。

https://github.com/duncansmart/less.js-windows

所以,回答了我自己的问题。