是否有人知道一种工具可以让我在我的Web场中的所有服务器上生成安装到.NET GAC的程序集的报告? (30-40台服务器)
或者,是否有人通过WMI,远程注册表查询或其他技术以编程方式访问信息的方式有指针或链接?
答案 0 :(得分: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打印到控制台。
随意使用此代码并根据您自己的目的进行修改。
答案 1 :(得分:2)
您可以禁用默认GAC视图,将其转换为注册表中的普通资源管理器视图,只需将以下值设置为1:
HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\
(来源http://sqlmusings.wordpress.com/2007/11/17/how-to-disable-gac-view/)
然后,您可以使用一些文件夹比较工具,或者只计算文件夹名称中存在的程序集。
仅供参考 - 这只是关闭了资源管理器视图,但是与文件系统的其他交互点(例如C#中的File对象或命令提示符)已经看到了这个视图,所以可能没有必要设置这个注册表项在你的所有服务器上。