我有一个节点js脚本在我的web角色中运行Socket.io实现。我可以找到如何启动节点js脚本的唯一方法是在命令提示符下运行它,所以我在web角色中创建了一个后台任务,它在命令提示符下运行脚本。以编程方式从命令提示符启动节点js脚本
我将节点js文件,cmd.exe和节点模块文件的“Copy To Output Directory”属性设置为“Copy If newer”,并且它们正在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/我得到这个重写代码
<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脚本样本蔚蓝节点JS应用。我想这跟我上面写的重写代码有关。我应该做些什么改变才能让App.js在启动时运行,并且仍然能够访问我的其他html视图?
感谢
它是app.js的标准是小写,这是如何保存你的文件? – 2013-03-12 13:12:58
是吗?我将它保存为App.js.我会改变这一点,并尝试 – Bitsian 2013-03-12 13:28:55
对不起,这是所有突出的,http://stackoverflow.com/questions/8173232/make-exe-from-node-js-app第二个和第三个解决方案可能有所帮助,但任何进一步建议将是一个猜测 – 2013-03-12 13:47:11