1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/// <summary>
/// Enthält Klassen und Methoden zur Auswertung des Fusion Cache
/// </summary>
public static class Fusion
{
/// <summary>
/// Liefert alle im Global Assembly Cache (GAC) installierte Assemblies.
/// </summary>
/// <returns>Liefert eine generische Liste mit AssemblyName-Objekten.</returns>
public static List<AssemblyName> GetAssembliesFromGAC()
{
List<AssemblyName> assemblyNames = new List<AssemblyName>();
RegistryKey localMaschine = Registry.LocalMachine;
RegistryKey registryKey = localMaschine.OpenSubKey(@"SOFTWARE\Microsoft\Fusion\GACChangeNotification\Default");
foreach (string valueName in registryKey.GetValueNames())
{
if (registryKey.GetValueKind(valueName) == RegistryValueKind.Binary)
{
AssemblyName assemblyName = new AssemblyName(valueName.Split(",".ToCharArray())[0]);
assemblyName.Version = new Version(valueName.Split(",".ToCharArray())[1]);
if (string.IsNullOrEmpty(valueName.Split(",".ToCharArray())[2]) == false)
{
assemblyName.CultureInfo = new System.Globalization.CultureInfo(valueName.Split(",".ToCharArray())[2]);
}
assemblyName.KeyPair = new StrongNameKeyPair(valueName.Split(",".ToCharArray())[3]);
if (valueName.Split(",".ToCharArray()).Length > 4)
{
if (string.IsNullOrEmpty(valueName.Split(",".ToCharArray())[4]))
{
assemblyName.ProcessorArchitecture = ProcessorArchitecture.None;
}
else
{
switch (valueName.Split(",".ToCharArray())[4].ToUpper())
{
case "AMD64":
assemblyName.ProcessorArchitecture = ProcessorArchitecture.Amd64;
break;
case "IA64":
assemblyName.ProcessorArchitecture = ProcessorArchitecture.IA64;
break;
case "MSIL":
assemblyName.ProcessorArchitecture = ProcessorArchitecture.MSIL;
break;
case "X86":
assemblyName.ProcessorArchitecture = ProcessorArchitecture.X86;
break;
}
}
}
assemblyNames.Add(assemblyName);
}
}
return assemblyNames;
}
}
|