2

netsh.net からコマンドを呼び出したいのですが、コマンドProcessを呼び出すプロセスを開始するためにクラスを使用していますが、正常に動作しています。たとえば、.NET でコマンドnetshによって返される出力を取得したいと考えています。netsh以下のコマンドProcess:

netsh wlan show hostednetwork

これにより、アクティブなホストされたネットワークのリストが返されます。

.NET でリストを読み取るにはどうすればよいですか?
誰かが私を助けたり、正しい道に連れて行ったりしてくれますか (サードパーティのツールを使いたくない)?


更新 以下は、netsh wlan show hostsnetwork コマンドを使用した私の戻り出力です

ホストされたネットワーク設定

Mode                   : Allowed
SSID name              : "AqaMaula(TUS)"
Max number of clients  : 100
Authentication         : WPA2-Personal
Cipher                 : CCMP

ホストされたネットワークのステータス

Status                 : Started
BSSID                  : 06:65:9d:26:f4:b7
Radio type             : 802.11n
Channel                : 11
Number of clients      : 1
    d0:c1:b1:44:8b:f0        Authenticated

個々のデータをすべて取得して、モード、SSID 名などのデータベースに (個別に) 配置する方法を誰か教えてもらえますか?

4

4 に答える 4

4

プロセスを開始する前StartInfo.UseShellExecuteに false とtrue に設定し、から読み取る必要があります。RedirectStandardOutputProcess.StandardOutput

ここの MSDN ですべて文書化されています: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

于 2012-02-14T19:07:40.943 に答える
4

クラスのStandardOutputプロパティを使用します。 上記のリンクされた MSDN ページには、使用方法の簡単な例が含まれています。Process
StandardOutput

于 2012-02-14T19:08:29.270 に答える
4

コードは次のとおりです。

using System;
using System.Diagnostics;

public static class Program
{
    public static void Main()
    {
        var output = RunProcess();
        Console.WriteLine(output);
    }

    /// <summary>
    /// Runs the process: starts it and waits upon its completion.
    /// </summary>
    /// <returns>
    /// Standart output content as a string.
    /// </returns>
    private static string RunProcess()
    {
        using (var process = CreateProcess())
        {
            process.Start();

            // To avoid deadlocks, always read the output stream first and then wait.
            // For details, see: [Process.StandardOutput Property (System.Diagnostics)](https://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput(v=vs.110).aspx).
            var output = process.StandardOutput.ReadToEnd();
            process.WaitForExit();

            return output;
        }
    }

    private static Process CreateProcess()
    {
        return new Process
            {
                StartInfo =
                    {
                        FileName = "netsh",
                        Arguments = "wlan show hostednetwork",
                        UseShellExecute = false,
                        RedirectStandardOutput = true
                    }
            };
    }
}

アップデート

コマンド ライン ユーティリティの結果を解析する代わりに、Managed Wifi APIフレームワークを使用する必要があると思います。より確実な方法です。ソースを見てください。それらにはWifiExampleが含まれています。

于 2012-02-14T19:11:15.717 に答える
1

次のようになります。

//@param output The output captured from the netsh command in String format
//@param key The key you are trying to find (in your example "Mode")
public String getValue(String output, String key) {
    MatchCollection matches;
    Regex rx = new Regex(@"(?<key>[A-Za-z0-0 ]+)\t\:\s(?<value>[.]+)");
    matches = rx.Matches(output);

    foreach (Match match in matches) {
        GroupCollection groups = match.Groups;

        if (groups["key"] == key) {
            return groups["value"];
        }
    }
}

残念ながら、小さなバグを修正するために atm をテストすることはできません。

また、それらを頻繁に参照する場合は、解析後に辞書に配置して、検索時間を短縮します。

于 2012-02-14T19:07:38.997 に答える