2012-05-21 51 views
4

我們的支持團隊已經診斷出計算機配置的某些特定區域,這可能會導致基於網絡的數據庫應用程序變慢。我的任務是創建一個工具來測試可能放緩的問題。我在檢測是否在Windows中爲其活動網絡適配器啓用了鏈接層拓撲時遇到問題。我有一個找到活動(最常用)網絡適配器的方法。檢測計算機上是否啓用鏈接層拓撲

有沒有辦法檢測鏈接層拓撲,我該如何測試它?

+1

它出現在最近的Windows版本的Windows服務。它的名字是'lltdsvc'。你可以檢查它的狀態。這只是一個粗略的指標,因爲該功能可以在每個適配器的基礎上禁用。我無法找到一個直接的方式來查詢此功能的網絡接口 – skarmats

+0

非常有見地。謝謝。這讓我注意到存儲網絡連接信息的地方,但我仍然空手而歸。如果我仍然無法找到它,我會將我的程序指向該服務。我只是將其標記爲「諮詢」而不是「必需的」更改。 – CEPA

回答

2

不是純淨的.Net解決方案,但似乎工作。函數接受本地連接的名稱和協議名稱。我有一個鏈接到一個網站,有很多不同的協議驅動程序名稱,但你想要的是包含在代碼中。

這使用nvspbind.exe,你可以從http://archive.msdn.microsoft.com/nvspbind得到。

CODE

class Program 
{ 
    static void Main(string[] args) 
    { 
     //check Link-Layer Topology Discover Mapper I/O Driver 
     bool result1 = IsProtocalEnabled("Local Area Connection", "ms_lltdio"); 
     //check Link-Layer Topology Discovery Responder 
     bool result2 = IsProtocalEnabled("Local Area Connection", "ms_rspndr"); 
    } 

    private static bool IsProtocalEnabled(string adapter, string protocol) 
    { 
     var p = new System.Diagnostics.Process(); 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.FileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nvspbind.exe"); 
     p.StartInfo.Arguments = string.Format("/o \"{0}\" {1}", adapter, protocol); 

     p.Start(); 

     string output = p.StandardOutput.ReadToEnd(); 

     p.WaitForExit(); 

     return output.Contains("enabled"); 
    } 
} 

我從這裏得到的協議驅動程序名稱:http://djseppie.wordpress.com/category/windows/scripting/

+0

真棒。我已經搜遍了,但一直沒有提出任何事。這正是我需要的!我不得不修改你的代碼來處理可能的多個網卡,所以我的代碼的返回語句如下所示: foreach(在輸出中的字符串strline('\ n')) { if(strline.Contains(adapter) ) return strline.Contains(「enabled」); } return output.Contains(「enabled」); 這將每個NIC劃分到它自己的行 – CEPA

+0

有趣的是,我不認爲它會返回任何東西,但完全匹配,除非你傳入一個像'%Local Area Connection%'這樣的搜索字符串,儘管如此。很高興它適合你。 – Peter