从 C# 代码安装 npm 失败
npm install from C# code fails
我正在尝试使用进程从 C# 代码执行 npm install
。 bundle目录是meteor build的产物,\bundle\programs\server里面的npm install是运行ning构建前的必做操作。
这是 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# 代码执行 npm install
。 bundle目录是meteor build的产物,\bundle\programs\server里面的npm install是运行ning构建前的必做操作。
这是 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";