[英]Redirect output from silent SQL Server installation to Standard Error in C#?
我有以下代碼:
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是將顯示輸出的TextBox。
但是,它不顯示SQL Server安裝的任何輸出。 我已經嘗試運行其他應用程序,並且它們正確地發送輸出,所以我認為代碼沒有錯。
如何讓SQL Server將其輸出傳遞給C#? 如果安裝失敗,我需要知道錯誤是什么。
也許這有幫助。 刪除以下代碼片段:
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";
}
事實證明,導致此問題的真正原因是,如果直接從MSI運行,SQL安裝將不會輸出任何內容。
相反,您必須首先運行MSI,並將其解壓縮到臨時目錄,然后在該目錄中運行setup exe。 這個exe將為您提供所需的輸出。
Markus Safar發布的帶有事件處理程序的答案也可能有助於滿足其他需求。
如果無法使管道工作,您可以隨時閱讀安裝日志文件。
我還通過Powershell使用靜默安裝。 對於錯誤,我查看最新文件夾中的Setup Bootstrap日志文件夾,並循環顯示Details.txt文件中包含“Error”的行
C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\Log\<datestamp>\Details.txt
不完美,但總比沒有輸出好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.