4

我有以下代码:

Process p = new Process();
p.StartInfo.FileName = "SQLEXPRADV_x86_ENU.exe";
p.StartInfo.Arguments = "/CONFIGURATIONFILE=Config.ini";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;

p.Start();

string line;
while ((line = p.StandardOutput.ReadLine()) != null)
{
   tOutputStandard.Text += line + "\r\n";
}

while ((line = p.StandardError.ReadLine()) != null)
{
   tOutputError.Text += line + "\r\n";
}

p.WaitForExit();

配置文件设置为静默运行。tOutputStandard 和 tOutputError 是显示输出的文本框。

但是,它不显示 SQL Server 安装的任何输出。我尝试过运行其他应用程序,并且它们正确发送了输出,所以我认为代码没有问题。

如何让 SQL Server 将其输出通过管道传输到 C#?如果安装失败,我需要知道错误是什么。

4

3 回答 3

2

也许这有帮助。删除以下代码片段:

string line;
while ((line = p.StandardOutput.ReadLine()) != null)
{
   tOutputStandard.Text += line + "\r\n";
}

while ((line = p.StandardError.ReadLine()) != null)
{
   tOutputError.Text += line + "\r\n";
}

改为连接到事件处理程序 OutputDataReceived 和 ErrorDataReceived:

p.OutputDataReceived += this.OutputDataReceived;
p.ErrorDataReceived += this.ErrorDataReceived;

回调方法如下所示。

private void ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
    tOutputError.Text += e.Data + "\r\n";
}

private void OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    tOutputStandard.Text += e.Data + "\r\n";
}
于 2013-10-28T23:11:43.523 回答
1

所以事实证明这个问题的真正原因是如果直接从 MSI 运行 SQL 安装将不会输出任何内容。

相反,您必须首先运行 MSI,并将其解压缩到临时目录,然后在该目录中运行 setup exe。此 exe 将为您提供所需的输出。

Markus Safar 发布的带有事件处理程序的答案也可能有助于满足其他需求。

于 2015-01-24T15:05:32.977 回答
0

如果您无法使管道正常工作,您可以随时阅读安装日志文件。

我还通过 Powershell 使用静默安装。对于错误,我从最新文件夹中查看 Setup Bootstrap 日志文件夹,并在 Details.txt 文件中循环查找包含“错误”的行

    C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\Log\<datestamp>\Details.txt 

不完美,但总比没有输出好。

于 2013-10-25T08:39:07.730 回答