1

有谁知道一个工具可以让我生成安装到我的网络场中所有服务器上的 .NET GAC 的程序集的报告?(30-40 台服务器)

或者,是否有人通过 WMI、远程注册表查询或其他技术以某种方式以编程方式访问信息的指针或链接?

4

2 回答 2

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 名称、程序集版本和 FileVersion 打印到控制台。

随意使用此代码并出于您自己的目的进行修改。

于 2009-11-05T16:38:44.773 回答
2

您可以禁用默认的 GAC 视图以将其变为注册表中的普通资源管理器视图,只需将以下值设置为 1:

HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\

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

然后,您可以只使用一些文件夹比较工具,或者只是从文件夹名称中找出存在哪些程序集。

仅供参考 - 这只是关闭资源管理器视图,但是与文件系统的其他交互点(例如 C# 中的 File 对象或命令提示符)已经看到此视图,因此可能不需要在所有文件上设置此注册表项你的服务器。

于 2009-11-05T15:21:58.783 回答