【问题标题】:Starting the node js script from command prompt programatically以编程方式从命令提示符启动节点 js 脚本
【发布时间】:2013-03-12 13:09:36
【问题描述】:

我有一个节点 js 脚本在我的网络角色中运行 Socket.io 实现。我能找到的关于如何启动节点 js 脚本的唯一方法是在命令提示符下运行它,所以我在 web 角色中创建了一个后台任务,它在命令提示符下运行脚本。

我将节点 js 文件、cmd.exe 和节点模块文件的“复制到输出目录”属性设置为“如果较新则复制”,它们正在 bin 文件夹中生成。如果我手动启动 bin 文件夹中的 cmd.exe 并运行命令“node App.js”,它可以工作,socket.io 正在侦听的端口正在运行。但是当我像下面这样以编程方式运行命令时它不起作用。

它不会抛出任何错误,所以我不知道它是否在我的代码中存在问题,或者我们无法像这样启动节点 js 脚本。有什么方法可以查明命令是否正确执行?因为进程启动时没有打开 cmd 提示窗口。非常感谢任何指导、建议或想法。谢谢

public class BackgroundThread
{
    public static void Start()
    {
        var appRoot = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot");

        ProcessStartInfo psi = new ProcessStartInfo();
        psi.CreateNoWindow = false;
        psi.FileName = Path.Combine(appRoot, "bin", "cmd.exe");
        psi.Arguments = "node app.js";
        psi.UseShellExecute = false;
        psi.WorkingDirectory = Path.Combine(appRoot, "bin");


        try
        {
            Process p = Process.Start(psi);

        }
        catch (Win32Exception ex)
        {
            Console.WriteLine(ex.ToString());
            Console.WriteLine(ex.StackTrace);
            Console.WriteLine(ex.Source);
            Console.WriteLine(ex.ErrorCode);
        }       
    }

}

编辑:

原来iisnode可以处理一切,我只需要在web.config中放置一个重写代码。从这里http://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/ 的示例 azure node js 应用程序中,我得到了这个重写代码

<rewrite>
  <rules>
    <clear />
    <rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
      <match url="iisnode.+" negate="true" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
      <action type="Rewrite" url="App.js" />
    </rule>
  </rules>
</rewrite>

它会自动启动 App.js,但会将我的所有视图重定向到 App.js 脚本。我想这与我上面写的重写代码有关。我应该进行哪些更改才能让 App.js 在启动时运行并且仍然能够访问我的其他 html 视图?

谢谢

【问题讨论】:

  • app.js 小写是标准的,你的文件也是这样保存的吗?
  • 哦,是吗?我已将其保存为 App.js。我会改变它并尝试
  • 对不起,这就是全部,stackoverflow.com/questions/8173232/make-exe-from-node-js-app 这里的第二个和第三个解决方案可能会有所帮助,但任何进一步的建议都是猜测

标签: c# .net node.js azure processstartinfo


【解决方案1】:

执行此操作的一种方法是将所有静态内容放在特定文件夹中并添加重写规则以绕过对 app.js 的重定向

`

                <!-- All other URLs are mapped to the Node.js application entry point -->
                <rule name="DynamicContent">
                     <conditions>
                          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
                     </conditions>
                     <action type="Rewrite" url="app.js"/>
                </rule>
`

【讨论】:

    【解决方案2】:

    在 web 角色中运行 node.js 的最佳方式是使用 iisnode - 这是一个 iis http 模块,它将 iis 请求重定向到 node.exe 进程,允许您将 iis 进程管理与 node.js 应用程序一起使用。

    您可以使用 windows azure powershell 或 azure 网站轻松完成此操作。详情见http://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/

    【讨论】:

    • 嘿,我已经编辑了我的问题,你能相应地更新你的答案吗?非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2013-01-25
    • 2013-01-07
    • 1970-01-01
    • 2013-09-22
    • 2016-07-01
    相关资源
    最近更新 更多