/// <summary> /// Removes rows from the Registry table that are generated by this extension. /// </summary> /// <param name="tables">The collection of tables.</param> private void FinalizeRegistryTable(TableCollection tables) { Table registryTable = tables["Registry"]; if (null != registryTable) { foreach (Row registryRow in registryTable.Rows) { // Check if the compiler writes this registry value; if so, it should be removed. if (this.registryValues.Contains(registryRow)) { Wix.ISchemaElement elem = this.Core.GetIndexedElement(registryRow); // If the registry row was found, remove it from its parent. if (null != elem && null != elem.ParentElement) { Wix.IParentElement elemParent = elem.ParentElement as Wix.IParentElement; if (null != elemParent) { elemParent.RemoveChild(elem); } } } } } }
/// <summary> /// Index an element. /// </summary> /// <param name="element">The element to index.</param> private void IndexElement(Wix.ISchemaElement element) { if (element is IIs.WebAddress) { this.webAddresses.Add(element); } else if (element is IIs.WebDir) { this.webDirs.Add(element); } else if (element is IIs.WebDirProperties) { this.webDirProperties.Add(element); } else if (element is IIs.WebFilter) { this.webFilters.Add(element); } else if (element is IIs.WebSite) { this.webSites.Add(element); } else if (element is IIs.WebVirtualDir) { this.webVirtualDirs.Add(element); } else if (element is Wix.Component) { this.components.Add(element); } else if (element is Wix.Directory) { Wix.Directory directory = (Wix.Directory)element; if (null != directory.FileSource) { this.directoryPaths.Add(directory.FileSource, directory); } } else if (element is Wix.Fragment || element is Wix.Module || element is Wix.PatchCreation || element is Wix.Product) { this.rootElement = (Wix.IParentElement)element; } // index the child elements if (element is Wix.IParentElement) { foreach (Wix.ISchemaElement childElement in ((Wix.IParentElement)element).Children) { this.IndexElement(childElement); } } }
/// <summary> /// Index an element. /// </summary> /// <param name="element">The element to index.</param> private void IndexElement(Wix.ISchemaElement element) { if (element is IIs.WebFilter) { this.webFilters.Add(element); } else if (element is IIs.WebSite) { this.webSites.Add(element); } else if (element is IIs.WebVirtualDir) { this.webVirtualDirs.Add(element); } else if (element is Wix.Directory) { Wix.Directory directory = (Wix.Directory)element; if (null != directory.Id && null != directory.FileSource) { this.directoryPaths.Add(directory.FileSource, directory.Id); } } else if (element is Wix.File) { Wix.File file = (Wix.File)element; if (null != file.Id && null != file.Source) { this.filePaths[file.Source] = String.Concat("[#", file.Id, "]"); } } // index the child elements if (element is Wix.IParentElement) { foreach (Wix.ISchemaElement childElement in ((Wix.IParentElement)element).Children) { this.IndexElement(childElement); } } }
/// <summary> /// Index an element. /// </summary> /// <param name="element">The element to index.</param> private void IndexElement(Wix.ISchemaElement element) { if (element is Wix.Component) { this.components.Add(element); } else if (element is Wix.ComponentGroup) { this.componentGroups.Add(element); } else if (element is Wix.Directory) { this.directories.Add(element); } else if (element is Wix.DirectoryRef) { this.directoryRefs.Add(element); } else if (element is Wix.Feature) { this.features.Add(element); } else if (element is Wix.File) { this.files.Add(element); } else if (element is Wix.Module || element is Wix.PatchCreation || element is Wix.Product) { Debug.Assert(null == this.rootElement); this.rootElement = (Wix.IParentElement)element; } // index the child elements if (element is Wix.IParentElement) { foreach (Wix.ISchemaElement childElement in ((Wix.IParentElement)element).Children) { this.IndexElement(childElement); } } }
/// <summary> /// Mutate an element. /// </summary> /// <param name="parentElement">The parent of the element to mutate.</param> /// <param name="element">The element to mutate.</param> private void MutateElement(Wix.IParentElement parentElement, Wix.ISchemaElement element) { if (element is Wix.File) { this.MutateFile(parentElement, (Wix.File)element); } // mutate the child elements if (element is Wix.IParentElement) { ArrayList childElements = new ArrayList(); // copy the child elements to a temporary array (to allow them to be deleted/moved) foreach (Wix.ISchemaElement childElement in ((Wix.IParentElement)element).Children) { childElements.Add(childElement); } foreach (Wix.ISchemaElement childElement in childElements) { this.MutateElement((Wix.IParentElement)element, childElement); } } }