public void FileXmlOutput(XmlTextWriter xtw) { foreach (Object obj in appModules) { MGTrackerNode tempNode = (MGTrackerNode)obj; if (tempNode.depAssmKey.Equals("")) { xtw.WriteStartElement("file"); xtw.WriteAttributeString("name", tempNode.installPath); xtw.WriteAttributeString("hash", tempNode.calcHashCode); xtw.WriteAttributeString("size", tempNode.size.ToString()); xtw.WriteEndElement(); } } }
public void CalculateSizes() { foreach (Object obj in appAssms) { MGTrackerNode tempNode = (MGTrackerNode)obj; tempNode.totalSize = tempNode.size; } foreach (Object obj in appModules) { MGTrackerNode tempNode = (MGTrackerNode)obj; if (!tempNode.depAssmKey.Equals("")) { MGTrackerNode tempNode2 = (MGTrackerNode)fileTable[tempNode.depAssmKey]; tempNode2.totalSize += tempNode.size; } } }
public void VerifyDependencies() { foreach (Object obj in appAssms) { MGTrackerNode tempNode = (MGTrackerNode)obj; if (!tempNode.isConfNode) { throw new MGDependencyException(tempNode.assmName + ", dependency of " + tempNode.depAssmName + ", is missing."); } } foreach (Object obj in appModules) { MGTrackerNode tempNode = (MGTrackerNode)obj; if (!tempNode.isConfNode) { throw new MGDependencyException(tempNode.installPath + ", dependency of " + tempNode.depAssmName + ", is missing."); } } }
public void DumpData() { foreach (Object obj in appAssms) { MGTrackerNode tempNode = (MGTrackerNode)obj; Console.WriteLine("Assembly " + tempNode.assmName + "; version " + tempNode.nVers); if (!tempNode.isConfNode) { Console.WriteLine("\tThis assembly is referenced by " + tempNode.depAssmName + " but isn't there"); } Console.WriteLine("Size: " + tempNode.size + "; Total Size: " + tempNode.totalSize); } Console.WriteLine(); foreach (Object obj in appModules) { MGTrackerNode tempNode = (MGTrackerNode)obj; Console.WriteLine("File " + tempNode.installPath + "; depends on " + tempNode.depAssmName); Console.WriteLine("Size: " + tempNode.size); } }
public void AssmXmlOutput(XmlTextWriter xtw) // this is always inside a dependency block { foreach (Object obj in appAssms) { MGTrackerNode tempNode = (MGTrackerNode)obj; xtw.WriteStartElement("dependentAssembly"); xtw.WriteStartElement("assemblyIdentity"); xtw.WriteAttributeString("name", tempNode.assmName); xtw.WriteAttributeString("version", tempNode.nVers.ToString()); xtw.WriteAttributeString("publicKeyToken", tempNode.publicKeyToken); xtw.WriteAttributeString("processorArchitecture", tempNode.procArch); xtw.WriteAttributeString("language", tempNode.lang); xtw.WriteEndElement(); xtw.WriteStartElement("install"); xtw.WriteAttributeString("codebase", tempNode.installPath); xtw.WriteAttributeString("size", tempNode.totalSize.ToString()); xtw.WriteEndElement(); xtw.WriteEndElement(); } }
void IFileOperator.ProcessFile(string startDir, string relPathDir, string fileName) { IAssemblyManifestImport currAssm = null; AssemblyIdentity assmID = null; DependentAssemblyInfo[] depAssmInfoArr = null; DependentFileInfo[] depFileInfoArr = null; MGTrackerNode tempNode; string relPath = Path.Combine(relPathDir, fileName); string absPath = Path.Combine(startDir, relPath); FileInfo fInf = new FileInfo(absPath); //Console.Write("Processing " + absPath + "... "); try { currAssm = DefaultAssemblyManifestImporter.GetAssemblyManifestImport(absPath); assmID = currAssm.GetAssemblyIdentity(); depAssmInfoArr = currAssm.GetDependentAssemblyInfo(); depFileInfoArr = currAssm.GetDependentFileInfo(); } catch (BadImageFormatException bife) { // This file is a module; update hash table tempNode = (MGTrackerNode)fileTable[relPath]; if (tempNode == null) { tempNode = new MGTrackerNode(); fileTable[relPath] = tempNode; tempNode.hashKey = relPath; tempNode.installPath = relPath; appModules.Add(tempNode); } tempNode.isConfNode = true; tempNode.calcHashCode = ComputeFileHash(fInf); tempNode.size = fInf.Length; // Finished updating module entry } if (currAssm != null) { // This file is an assembly; update hash table if (!IsPlatform(assmID.PublicKeyTokenString)) // completely ignore if it's part of a platform { tempNode = (MGTrackerNode)fileTable[assmID.FullName]; if (tempNode == null) { tempNode = new MGTrackerNode(); fileTable[assmID.FullName] = tempNode; tempNode.hashKey = assmID.FullName; tempNode.assmName = assmID.Name; tempNode.isAssm = true; tempNode.nVers = assmID.Vers; tempNode.publicKeyToken = assmID.PublicKeyTokenString; appAssms.Add(tempNode); } tempNode.isConfNode = true; tempNode.installPath = relPath; tempNode.size = fInf.Length; // Finished updating assembly entry // Now we process assembly dependencies //depAssmInfoArr = currAssm.GetDependentAssemblyInfo(); foreach (DependentAssemblyInfo depAssmInfo in depAssmInfoArr) { AssemblyIdentity depAssmID = depAssmInfo.AssmID; if (!IsPlatform(depAssmID.PublicKeyTokenString)) // maybe call this "IsPlatform", "CheckPlatform" { tempNode = (MGTrackerNode)fileTable[depAssmID.FullName]; if (tempNode == null) { tempNode = new MGTrackerNode(); fileTable[depAssmID.FullName] = tempNode; tempNode.hashKey = depAssmID.FullName; tempNode.assmName = depAssmID.Name; tempNode.isAssm = true; tempNode.nVers = depAssmID.Vers; tempNode.publicKeyToken = depAssmID.PublicKeyTokenString; appAssms.Add(tempNode); } tempNode.depAssmKey = assmID.FullName; tempNode.depAssmName = assmID.Name; } } // Done with assembly dependencies // Now we process file dependencies //depFileInfoArr = currAssm.GetDependentFileInfo(); foreach (DependentFileInfo depFileInfo in depFileInfoArr) { // For the hashtable, we actually need the relative path from the application root to the file, // because we want this file entry's hash key to match the file entry that is obtained by discovering // the actual location of the file string fileHashKey = Path.Combine(relPathDir, depFileInfo.Name); tempNode = (MGTrackerNode)fileTable[fileHashKey]; if (tempNode == null) { tempNode = new MGTrackerNode(); fileTable[fileHashKey] = tempNode; tempNode.hashKey = fileHashKey; tempNode.installPath = fileHashKey; appModules.Add(tempNode); } tempNode.depAssmKey = assmID.FullName; tempNode.depAssmName = assmID.Name; } // Done with file dependencies } } //Console.WriteLine("done"); }