2009-11-05 52 views
1

有誰知道一個工具,可以讓我生成安裝到我的Web場中的所有服務器上的.NET GAC的程序集報告? (30-40個服務器)多個服務器的GAC比較工具?

或者,還有人在通過WMI或遠程註冊表查詢或其他技術以編程方式訪問信息的某種方式上有指針或鏈接嗎?

+0

感謝您 - 我一直在讓我的網絡服務器保持互相同步的可怕時間,這將很好地幫助! – SqlRyan 2009-11-16 15:09:01

回答

3

感謝Kragen,因爲暗示在Explorer的GAC視圖的單板下面存在我可以用System.IO命名空間查詢的文件。幸運的是,我有網絡訪問每臺服務器。

我只需要一個程序集來查詢許多服務器上GAC中存在的版本。儘管遠遠稱不上完整的報表應用程序,這個片段擔任我的目的很好:

private static void QueryServerGAC(string IP) 
{ 
    string rootPath = String.Format(@"\\{0}\C$\WINDOWS\Assembly", IP); 
    DirectoryInfo root = new DirectoryInfo(rootPath); 

    foreach (DirectoryInfo gacDir in root.GetDirectories("GAC*")) // GAC, GAC_32, GAC_MSIL 
    { 
     foreach (DirectoryInfo assemDir in gacDir.GetDirectories("MyAssemblyName")) 
     { 
      foreach (DirectoryInfo versionDir in assemDir.GetDirectories()) 
      { 
       string assemVersion = versionDir.Name.Substring(0, versionDir.Name.IndexOf('_')); 
       foreach (FileInfo fi in versionDir.GetFiles("*.dll")) 
       { 
        FileVersionInfo vi = FileVersionInfo.GetVersionInfo(fi.FullName); 
        Console.WriteLine("{0}\t{1}\t{2}\t{3}", IP, fi.Name, assemVersion, vi.FileVersion); 
       } 
      } 
     } 
    } 
} 

這一次爲每個感興趣的服務器IP被調用,並打印出IP,DLL名稱,程序集版本,和文件版本到控制檯。

隨意採取此代碼並修改爲您自己的目的。

2

您可以禁用默認GAC視圖把它變成在註冊表中的正常Explorer視圖中,只要設定下面的值設置爲1:

HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\ 

(來源http://sqlmusings.wordpress.com/2007/11/17/how-to-disable-gac-view/

然後,您可以只使用一些文件夾比較工具,或者只是從文件夾名稱中計算出什麼程序集。這只是關閉資源管理器視圖,但是與文件系統(例如C#中的File對象,或命令提示符)交互的其他方面已經看到了這個視圖,所以可能沒有任何需要設置此註冊表。關鍵在您的所有服務器上。