1 回答

TA貢獻1891條經驗 獲得超3個贊
您可以檢查您的npm和newman命令的退出代碼并將它們返回給調用進程:
public string Runner ()
{
var psiNpm = new ProcessStartInfo
{
FileName = "cmd",
RedirectStandardOutput = true,
RedirectStandardInput = true,
UseShellExecute = false
};
var pNpmRun = Process.Start(psiNpm);
pNpmRun.StandardInput.WriteLine("npm install -g newman");
pNpmRun.StandardInput.WriteLine("if not "%ERRORLEVEL%" == "0" exit 1");
pNpmRun.StandardInput.WriteLine("newman run " +
"\"C:\\Postman\\Test.postman.json\" " +
"--folder \"TestSearch\" " +
"--environment \"C:\\Postman\\postman_environment.json\" " +
"--disable-unicode");
pNpmRun.StandardInput.WriteLine("if not "%ERRORLEVEL%" == "0" exit 2");
pNpmRun.StandardInput.WriteLine("exit 0");
var tenMin = 10 * 60 * 1000;
if(pNpmRun.WaitForExit(tenMin)) {
var exitCode = pNpmRun.ExitCode;
if(exitCode != 0) {
throw new Exception("Command failed " + exitCode);
}
return pNpmRun.StandardOutput.ReadToEnd();
} else {
pNpmRun.Kill();
throw new TimeoutException("Command didn't complete in 10 minute timeout");
}
}
在每個命令之后檢查errorlevel,這是一個“虛擬環境變量”,代表前一個命令的退出代碼。如果它不是 0(通常是成功),那么它將退出cmd進程并返回到您的 C# 代碼。您的 C# 代碼檢查ExitCode進程的狀態,如果不成功 (0),它會拋出一個包含 ExitCode 的異常,以便您知道這兩個命令中的哪一個失敗了。這依賴于npm和newman進程在失敗時返回非零退出代碼。
那應該處理“失敗”。處理“掛起”會更加困難。實際上沒有任何方法可以知道該過程是否會返回(閱讀:停止問題(我在大學學到的一件事))。
- 1 回答
- 0 關注
- 197 瀏覽
添加回答
舉報