2016-02-15 228 views
1

我想从C#代码使用进程执行npm install。 bundle目录是meteor build的产品,在运行构建之前,\ bundle \ programs \ server中的npm install是必需的操作。从C#代码npm安装失败

下面是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#中的问题,还是我正在做这件事?

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

EDIT1:

与答案改变我运行后错误:

变化:

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

Erorr:

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 

回答

3

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

所以你应该可以直接从文件夹中运行,而不需要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"; 
+0

请检查我的编辑是利用node.exe – eomeroff

+0

第一个建议与防范机制。 cmd永远运行。 – eomeroff

+0

请尝试与我在答案中发布的相同方式。我在npm-cli.js的路径中添加了引号。由于程序文件中有空格,因此需要使用引号。这就是为什么在错误信息中它告诉你它找不到''C:\ Program''。它切断了其余的部分。 –