簡體   English   中英

將靜默SQL Server安裝的輸出重定向到C#中的標准錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM