.net 执行cmd脚本
最近根据项目去球,需要使用.net core去执行脚本,,使用npm安装模块,于是就整理了下代码,如下:
/// <summary>
/// 安装应用app
/// </summary>
/// <param name="companyID">公司code</param>
/// <param name="appName">应用模块名称</param>
/// <returns></returns>
public ReturnEntity installApp(string companyCode, string appName)
{
ReturnEntity ret = new ReturnEntity();
Process process = new Process();
try
{
// 定位脚本执行目录,
// 不设置,则默认为程序运行目录
string basePath = Directory.GetCurrentDirectory();
string dir = basePath + $"/wwwroot/src/@{companyCode}/{appName}";
process.StartInfo.WorkingDirectory = dir;
process.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
process.StartInfo.CreateNoWindow = true; //是否在新窗口中启动该进程的值 (不显示程序窗口)
process.StartInfo.RedirectStandardInput = true; // 接受来自调用程序的输入信息
process.StartInfo.RedirectStandardOutput = true; // 由调用程序获取输出信息
process.StartInfo.RedirectStandardError = true; //重定向标准错误输出
process.StartInfo.FileName = "cmd.exe";
process.Start(); // 启动程序
// 测试命令
//process.StandardInput.WriteLine("help"); //向cmd窗口发送输入信息
process.StandardInput.AutoFlush = true;
// 前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死
process.StandardInput.WriteLine("exit");
StreamReader reader = process.StandardOutput;//获取exe处理之后的输出信息
string curLine = reader.ReadLine(); //获取错误信息到error
while (!reader.EndOfStream)
{
if (!string.IsNullOrEmpty(curLine))
{
Console.WriteLine(curLine);
}
curLine += reader.ReadLine();
}
// 返回执行结果
ret.msg = curLine;
reader.Close(); //close进程
process.WaitForExit(); //等待程序执行完退出进程
process.Close();
}
catch (Exception e)
{
ret.code = -1;
ret.msg = "500 error,please view system error log!";// + ex.Message;
MyLib.LogUtil.Error(e);
}
return ret;
}

浙公网安备 33010602011771号