如何从C#

时间:2019-03-20 12:53:44

标签: c# node.js

最近,当我尝试从C#中的代码运行Node.js程序包时遇到问题。

首先,我在命令行中安装了一个软件包(注释适用于不熟悉nodejs的人)

// npm as the node package manager
// -g means "install globally"
// quicktype is the package that i'm trying to use, though it doesn't matter here which package you want to try with
npm install -g quicktype  

正常的命令行调用:

// a simple usage of quicktype's functionality
quicktype --version

这是我尝试复制命令行调用的尝试:

var startinfo = new ProcessStartInfo();
proc.StartInfo.FileName = "quicktype";
proc.StartInfo.Arguments = "--version";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start ();

执行失败,错误是:系统找不到指定的文件。

我可以理解为什么它找不到程序,但仍然找不到正确的方法。

1 个答案:

答案 0 :(得分:3)

我用C#写了一个简单的NodeJsServer类,可以帮助您解决这些问题。它在GitHub here上可用。它有很多选项,您可以在特定目录中执行“ npm install”命令,或启动NodeJ,检查当前状态(正在运行,正在编译,正在启动,正在安装),最后停止NodeJ。检查quick example usage

这是您要执行的操作的原始代码(主要从NodeJsServer类复制):

// create the command-line process
var cmdProcess = new Process
{
    StartInfo =
    {
        FileName = "cmd.exe",
        UseShellExecute = false,
        CreateNoWindow = true, // this is probably optional
        ErrorDialog = false, // this is probably optional
        RedirectStandardOutput = true,
        RedirectStandardInput = true
    }
};

// register for the output (for reading the output)
cmdProcess.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
{
    string output = e.Data;
    // inspect the output text here ...
};

// start the cmd process
cmdProcess.Start();
cmdProcess.BeginOutputReadLine();

// execute your command
cmdProcess.StandardInput.WriteLine("quicktype --version");