c# - 从 C# 代码安装 npm 失败

标签 c# process bundle npm-install

我正在尝试使用进程从 C# 代码执行 npm install。 bundle 目录是 meteor build 的产物,\bundle\programs\server 里面的 npm install 是运行 build 前的必做操作。

这是 C# 代码:

processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardInput = true;
processInfo.WorkingDirectory = @"C:\some_service\bundle\programs\server";
processInfo.FileName = @"C:\Program Files (x86)\nodejs\node.exe";
processInfo.Arguments = "npm install";
process = Process.Start(processInfo);
process.WaitForExit();

stderr_str = process.StandardError.ReadToEnd();
stdout_str = process.StandardOutput.ReadToEnd();

stderr_str变量中的错误代码是:

    module.js:340
    throw err;
          ^
Error: Cannot find module 'C:\some_service\bundle\programs\server\npm'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:935:3

当我通过相应目录中的 cms 手动运行它时,它工作正常。为什么它会是 C# 的问题,还是我这样做正确?

任何建议或提示都会有所帮助。

编辑1:

根据答案的变化运行后我得到错误:

改变:

    processInfo.FileName =  @"C:\Program Files (x86)\nodejs\node.exe";
    processInfo.Arguments = @"C:\Program Files (x86)\nodejs\node_modules\npm\bin\npm-cli.js install";

错误:

module.js:340
    throw err;
          ^
Error: Cannot find module 'C:\Program'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:935:3

最佳答案

npm 实际上是 node.exe 旁边的一个 .cmd 文件。

因此您应该能够直接从文件夹中运行它而无需 node.exe

processInfo.FileName = @"C:\Program Files (x86)\nodejs\npm.cmd";
processInfo.Arguments = "install";

或者如果你出于某种原因想要 node.exe,你应该能够这样做:

processInfo.FileName = @"C:\Program Files (x86)\nodejs\node.exe";
processInfo.Arguments = "\"C:\\Program Files (x86)\\nodejs\\node_modules\\npm\\bin\\npm-cli.js\" install";

关于c# - 从 C# 代码安装 npm 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419328/

相关文章:

asp.net-mvc - 方法 "Bundle.Include"(在与 ASP.NET MVC 一起使用的 System.Web.Optimization 中)是否可以抛出异常而不是默默地忽略丢失的文件?

asp.net-mvc - `BundleTable.EnableOptimizations = true` 时是否使用版本文件的 .min ?

symfony - 在 symfony2 中创建供应商包并通过 Composer 部署它

c# - 调试 JSON.NET

c# - 我怎样才能不在 if 语句中重复 OR 的整个部分?

c# - Unity接触点无碰撞器

java - 如何允许从 shutdownHook 登录任何类

c# - ffmpeg 的奇怪行为 - 当我关闭我的应用程序时开始转换

C# 简单游戏架构