我正在遵循有关此主题的其他 SO 文章的指导,但我一直无法找到我需要的东西。我有以下代码块启动 - 在这种情况下 - 一个已知损坏的 .msi (为了测试标准错误消息的检索):
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd.exe", "/c " + thirdPartyApp.Item2.InstallString);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
writeEvent(EventLogEntryType.Information, "Attempting to launch upgrade: " + thirdPartyApp.Item2.InstallString, "Third Party Update");
proc.Start();
string stderror = proc.StandardError.ReadToEnd();
proc.WaitForExit();
手动启动时,此 .msi 会引发错误代码 1620,并显示消息“无法打开此安装包。请联系应用程序供应商以验证这是一个有效的 Windows Installer 包。”
在调试时,如果我查看 proc.ExitCode 它的值是 1620 - 所以它正确地捕获了它。我添加了该行string stderror = proc.StandardError.ReadToEnd();
以尝试捕获错误文本,但是在该过程执行并且错误输出后,stderror 的值为“”。
如何将实际的错误文本抓取到变量中?