我正在浏览一个简单的应用程序,并尝试进行一些更改/改进。目前,我们让应用程序在远程计算机上运行bat文件,该文件又执行DTSX文件。这很好。
我希望能够捕获bat / dtsx文件中的事件/输出。我找到了this,但由于我没有通过代码直接运行DTSX文件,我不确定这是否适用于此。我对运行DTSX / SSIS软件包知之甚少,所以我真的不确定从哪里开始。
还应该注意,这是在VB.NET中完成的。
答案 0 :(得分:1)
在我的脑海中,最简单的选择是修改批处理脚本以重定向输出。
dtexec.exe /file myPackage.dtsx > myPackage.log
这将覆盖每次执行的日志文件。您可以通过将当前%date%和%time%附加到输出文件名来获得更好的效果。
下一个选项可能是更改您的调用代码。您可以将.NET代码读入显示的内容,而不是重定向批处理脚本以写入文件。不是最好的代码,它在C#中,但我需要参加会议而没有时间来改变它。以下代码查看ProcessResults对象,并提取标准输出和标准错误流。
this.processStartInfo = new ProcessStartInfo(this.dtUtilPath, parameters);
this.processStartInfo.RedirectStandardError = true;
this.processStartInfo.RedirectStandardOutput = true;
this.processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
this.processStartInfo.UseShellExecute = false;
System.Diagnostics.Process process = null;
// Perhaps it would be better to set this to 0 so that it runs to completion
int waitInMilliSeconds = 1 * 1000;
process = System.Diagnostics.Process.Start(this.processStartInfo);
System.IO.StreamReader standardError = process.StandardError;
System.IO.StreamReader standardOutput = process.StandardOutput;
process.WaitForExit(waitInMilliSeconds);
if (process.HasExited)
{
// Did it do well?
// Currently, prints results to console but based on
// exit code values can do whatever the business need is
System.Console.WriteLine(standardOutput.ReadToEnd());
System.Console.WriteLine(standardError.ReadToEnd());
System.Console.WriteLine(process.ExitCode);
}
此时,使用上述任何一种解决方案,您都在考虑解析上述文本“您认为重要的任何信息”。如果它是我并且基于我迄今为止对问题域的了解,我将完全跳过.NET捕获信息。如果您喜欢双重职责,那么批量脚本捕获可能会有所帮助,但我会选择原生SSIS logging。这将需要对已部署的软件包进行代码更改,但我发现
具有最佳的SSIS体验