簡體   English   中英

如何在c#中顯示cmd的多行輸出

[英]How to display a multi-line output from cmd in c#

我需要我的c#程序來運行cmd查詢以顯示所有sql服務,然后在消息框中顯示它們。 在我將要運行的情況下,經常會有多個,每次名稱可能不同。

“Wmic服務在哪里(PathName如'%Binn \\ sqlservr%')獲取標題,名稱”顯示我需要的信息,但返回了多行。 WriteNote()方法是將信息寫入程序中的文本框的方法。

我已經嘗試了我在Google上可以找到的所有內容,似乎沒有任何工作。

    private void DoListSQLServices()
    {
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        //startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = "Wmic service where (PathName like '%Binn\\sqlservr%') get caption, name";
        process.StartInfo = startInfo;
        startInfo.RedirectStandardOutput = true;
        startInfo.UseShellExecute = false; 
        process.Start();
        string output = process.StandardOutput.ReadToEnd();

          this.WriteNote(output);
        process.WaitForExit();             
    }

當我運行此代碼時,我得到了這個:

Microsoft Windows [版本6.1.7601]版權所有(c)2009 Microsoft Corporation。 版權所有。

{項目的文件位置} \\ bin \\ Debug>

並將一個pbd文件放在debug文件夾中。

我想要的是它顯示SQL服務的標題和名稱,就像你手動通過cmd運行該命令一樣。 最終用戶會輸入其中一個程序來重新啟動它們,但我寧願讓程序顯示列表,而不是讓用戶轉到Windows中的服務並手動搜索它們。

提前致謝!

正如Noodles在評論中所提到的,通過.NET中的WMI支持來做這件事要好得多。 其中一個相當直接的方法是使用ManagementObjectSearcher類對WMI數據執行ObjectQuery

創建一個新的控制台應用程 添加System.Management程序集的引用並using System.Management;添加using System.Management; program.cs文件的頂部。

現在添加以下代碼:

static void Main()
{
    // Create a scope (connection to WMI)
    var scope = new ManagementScope(@"\\localhost\root\cimv2");

    // Create query
    var query = new ObjectQuery(@"SELECT Name,Caption FROM Win32_Service WHERE PathName like '%Binn\\sqlserv%'");

    // Create a search to run the query against the scope
    using (var search = new ManagementObjectSearcher(scope, query))
    {
        // Iterate through the query results
        foreach (var item in search.Get())
        {
            // get values, all strings in this case
            string name = (string)item["Name"];
            string caption = (string)item["Caption"];
            Console.WriteLine("{0}\t{1}", name, caption);
        }
    }
}

請注意, ObjectQuery查詢語法與WMIC語法略有不同。 它被稱為WQL(WMI查詢語言),並且在SQL上進行了大量建模。

希望您可以相當容易地調整上述內容以供您自己使用。 請注意您要獲取的字段的實際類型。 這是 Win32_Service對象的屬性列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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