<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Microsoft.Deployment.WindowsInstaller.Package</name>
    </assembly>
    <members>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPackageMessageHandler">
            <summary>
            Handles status messages generated when operations are performed on an
            <see cref="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage"/> or <see cref="T:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage"/>.
            </summary>
            <example>
            <c>installPackage.Message += new InstallPackageMessageHandler(Console.WriteLine);</c>
            </example>
        </member>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage">
            <summary>
            Provides access to powerful build, maintenance, and analysis operations on an
            installation package (.MSI or .MSM).
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.#ctor(System.String,Microsoft.Deployment.WindowsInstaller.DatabaseOpenMode)">
            <summary>
            Creates a new InstallPackage object.  The file source directory and working
            directory are the same as the location as the package file.
            </summary>
            <param name="packagePath">Path to the install package to be created or opened</param>
            <param name="openMode">Open mode for the database</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.#ctor(System.String,Microsoft.Deployment.WindowsInstaller.DatabaseOpenMode,System.String,System.String)">
            <summary>
            Creates a new InstallPackage object, specifying an alternate file source
            directory and/or working directory.
            </summary>
            <param name="packagePath">Path to the install package to be created or opened</param>
            <param name="openMode">Open mode for the database</param>
            <param name="sourceDir">Location to obtain source files and cabinets when extracting
            or updating files in the working directory. This is often the location of an original
            copy of the package that is not meant to be modified. If this parameter is null, it
            defaults to the directory of <paramref name="packagePath"/>.</param>
            <param name="workingDir">Location where files will be extracted to/updated from. Also
            the location where a temporary folder is created during some operations. If this
            parameter is null, it defaults to the directory of <paramref name="packagePath"/>.</param>
            <remarks>If the source location is different than the working directory, then
            no files will be modified at the source location.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.LogMessage(System.String,System.Object[])">
            <summary>
            Sends a message to the <see cref="E:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Message"/> event-handler.
            </summary>
            <param name="format">Message string, containing 0 or more format items</param>
            <param name="args">Items to be formatted</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.FindFiles(System.String)">
            <summary>
            Gets the list of file keys that have the specified long file name.
            </summary>
            <param name="longFileName">File name to search for (case-insensitive)</param>
            <returns>Array of file keys, or a 0-length array if none are found</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.FindFiles(System.Text.RegularExpressions.Regex)">
            <summary>
            Gets the list of file keys whose long file names match a specified
            regular-expression search pattern.
            </summary>
            <param name="pattern">Regular expression search pattern</param>
            <returns>Array of file keys, or a 0-length array if none are found</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.ExtractFiles">
            <summary>
            Extracts all files to the <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.WorkingDirectory"/>. The files are extracted
            to the relative directory matching their <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.SourcePath"/>.
            </summary>
            <remarks>If any files have the uncompressed attribute, they will be copied
            from the <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.SourceDirectory"/>.</remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.ExtractFiles(System.Collections.Generic.ICollection{System.String})">
            <summary>
            Extracts a specified list of files to the <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.WorkingDirectory"/>. The files
            are extracted to the relative directory matching their <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.SourcePath"/>.
            </summary>
            <param name="fileKeys">List of file key strings to extract</param>
            <remarks>If any files have the uncompressed attribute, they will be copied
            from the <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.SourceDirectory"/>.</remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.UpdateFiles">
            <summary>
            Updates the install package with new files from the <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.WorkingDirectory"/>.  The
            files must be in the relative directory matching their <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.SourcePath"/>.
            This method re-compresses and packages the files if necessary, and also updates the
            following data: File.FileSize, File.Version, File.Language, MsiFileHash.HashPart*
            </summary>
            <remarks>
            The cabinet compression level used during re-cabbing can be configured with the
            <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.CompressionLevel"/> property.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.UpdateFiles(System.Collections.Generic.ICollection{System.String})">
            <summary>
            Updates the install package with new files from the <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.WorkingDirectory"/>.  The
            files must be in the relative directory matching their <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.SourcePath"/>.
            This method re-compresses and packages the files if necessary, and also updates the
            following data: File.FileSize, File.Version, File.Language, MsiFileHash.HashPart?.
            </summary>
            <param name="fileKeys">List of file key strings to update</param>
            <remarks>
            This method does not change the media structure of the package, so it may require extracting
            and re-compressing a large cabinet just to update one file.
            <p>The cabinet compression level used during re-cabbing can be configured with the
            <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.CompressionLevel"/> property.</p>
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Consolidate(System.String)">
            <summary>
            Consolidates a package by combining and re-compressing all files into a single
            internal or external cabinet.
            </summary>
            <param name="mediaCabinet"></param>
            <remarks>If an installation package was built from many merge modules, this
            method can somewhat decrease package size, complexity, and installation time.
            <p>This method will also convert a package with all or mostly uncompressed
            files into a package where all files are compressed.</p>
            <p>If the package contains any not-yet-applied binary file patches (for
            example, a package generated by a call to <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.ApplyPatch(Microsoft.Deployment.WindowsInstaller.Package.PatchPackage,System.String)"/>) then
            this method will apply the patches before compressing the updated files.</p>
            <p>This method edits the database summary information and the File, Media
            and Patch tables as necessary to maintain a valid installation package.</p>
            <p>The cabinet compression level used during re-cabbing can be configured with the
            <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.CompressionLevel"/> property.</p>
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.UpdateDirectories">
            <summary>
            Rebuilds the cached directory structure information accessed by the
            <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Directories"/> and <see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Files"/> properties. This
            should be done after modifying the File, Component, or Directory
            tables, or else the cached information may no longer be accurate.
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.ApplyPatch(Microsoft.Deployment.WindowsInstaller.Package.PatchPackage,System.String)">
            <summary>
            Applies a patch package to the database, resulting in an installation package that
            has the patch built-in.
            </summary>
            <param name="patchPackage">The patch package to be applied</param>
            <param name="transform">Optional name of the specific transform to apply.
            This parameter is usually left null, which causes the patch to be searched for
            a transform that is valid to apply to this database.</param>
            <remarks>
            If the patch contains any binary file patches, they will not immediately be applied
            to the target files, though they will at installation time.
            <p>After calling this method you can use <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Consolidate(System.String)"/> to apply
            the file patches immediately and also discard any outdated files from the package.</p>
            </remarks>
        </member>
        <member name="E:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Message">
            <summary>
            Handle this event to receive status messages when operations are performed
            on the install package.
            </summary>
            <example>
            <c>installPackage.Message += new InstallPackageMessageHandler(Console.WriteLine);</c>
            </example>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.SourceDirectory">
            <summary>
            Gets or sets the location to obtain source files and cabinets when
            extracting or updating files in the working directory. This is often
            the location of an original copy of the package that is not meant
            to be modified.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.WorkingDirectory">
            <summary>
            Gets or sets the location where files will be extracted to/updated from. Also
            the location where a temporary folder is created during some operations.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Directories">
            <summary>
            Gets a mapping from Directory keys to source/target paths.
            </summary>
            <remarks>
            If the Directory table is modified, this mapping
            will be outdated until you call <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.UpdateDirectories"/>.
            </remarks>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Files">
            <summary>
            Gets a mapping from File keys to source/target paths.
            </summary>
            <remarks>
            If the File, Component, or Directory tables are modified, this mapping
            may be outdated until you call <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.UpdateDirectories"/>.
            </remarks>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.CompressionLevel">
            <summary>
            Gets or sets the compression level used by <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.UpdateFiles"/>
            and <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Consolidate(System.String)"/>.
            </summary>
            <remarks>
            If the Directory table is modified, this mapping will be outdated
            until you close and reopen the install package.
            </remarks>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage.Property">
            <summary>
            Accessor for getting and setting properties of the InstallPackage database.
            </summary>
        </member>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPackageProperties">
            <summary>
            Accessor for getting and setting properties of the <see cref="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPackage"/> database.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPackageProperties.Item(System.String)">
            <summary>
            Gets or sets a property in the database. When getting a property
            that does not exist in the database, an empty string is returned.
            To remove a property from the database, set it to an empty string.
            </summary>
            <remarks>
            This has the same results as direct SQL queries on the Property table; it's only
            meant to be a more convenient way of access.
            </remarks>
        </member>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPath">
            <summary>
            Represents the installation path of a file or directory from an installer product database.
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.#ctor(System.String)">
            <summary>
            Creates a new InstallPath, specifying a filename.
            </summary>
            <param name="name">The name of the file or directory.  Not a full path.</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.#ctor(System.String,System.Boolean)">
            <summary>
            Creates a new InstallPath, parsing out either the short or long filename.
            </summary>
            <param name="name">The name of the file or directory, in short|long syntax for a filename
            or targetshort|targetlong:sourceshort|sourcelong syntax for a directory.</param>
            <param name="useShortNames">true to parse the short part of the combined filename; false to parse the long part</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.ToString">
            <summary>
            Gets the full source path.
            </summary>
            <returns><see cref="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.SourcePath"/></returns>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.ParentPath">
            <summary>
            Gets the path of the parent directory.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.ChildPaths">
            <summary>
            Gets the set of child paths if this InstallPath object represents a a directory.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.SourceName">
            <summary>
            Gets or sets the source name of the InstallPath.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.TargetName">
            <summary>
            Gets or sets the target name of the install path.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.SourcePath">
            <summary>
            Gets the full source path.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPath.TargetPath">
            <summary>
            Gets the full target path.
            </summary>
        </member>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection">
            <summary>
            Represents a collection of InstallPaths that are the child paths of the same parent directory.
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.Add(Microsoft.Deployment.WindowsInstaller.Package.InstallPath)">
            <summary>
            Adds a new child path to the collection.
            </summary>
            <param name="item">The InstallPath to add.</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.Remove(Microsoft.Deployment.WindowsInstaller.Package.InstallPath)">
            <summary>
            Removes a child path to the collection.
            </summary>
            <param name="item">The InstallPath to remove.</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.IndexOf(Microsoft.Deployment.WindowsInstaller.Package.InstallPath)">
            <summary>
            Gets the index of a child path in the collection.
            </summary>
            <param name="item">The InstallPath to search for.</param>
            <returns>The index of the item, or -1 if not found.</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.Insert(System.Int32,Microsoft.Deployment.WindowsInstaller.Package.InstallPath)">
            <summary>
            Inserts a child path into the collection.
            </summary>
            <param name="index">The insertion index.</param>
            <param name="item">The InstallPath to insert.</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.Contains(Microsoft.Deployment.WindowsInstaller.Package.InstallPath)">
            <summary>
            Tests if the collection contains a child path.
            </summary>
            <param name="item">The InstallPath to search for.</param>
            <returns>true if the item is found; false otherwise</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.CopyTo(Microsoft.Deployment.WindowsInstaller.Package.InstallPath[],System.Int32)">
            <summary>
            Copies the collection into an array.
            </summary>
            <param name="array">The array to copy into.</param>
            <param name="index">The starting index in the destination array.</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.RemoveAt(System.Int32)">
            <summary>
            Removes an item from the collection.
            </summary>
            <param name="index">The index of the item to remove.</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.Clear">
            <summary>
            Removes all items from the collection.
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.GetEnumerator">
            <summary>
            Gets an enumerator over all items in the collection.
            </summary>
            <returns>An enumerator for the collection.</returns>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.Item(System.Int32)">
            <summary>
            Gets or sets the element at the specified index.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathCollection.Count">
            <summary>
            Gets the number of items in the collection.
            </summary>
        </member>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap">
            <summary>
            Represents a mapping of install paths for all directories, components, or files in
            an installation database.
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.BuildFilePathMap(Microsoft.Deployment.WindowsInstaller.Database,Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap,System.Boolean)">
            <summary>
            Builds a mapping from File keys to installation paths.
            </summary>
            <param name="db">Installation database.</param>
            <param name="componentPathMap">Component mapping returned by <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.BuildComponentPathMap(Microsoft.Deployment.WindowsInstaller.Database,Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap)"/>.</param>
            <param name="useShortNames">true to use short file names; false to use long names</param>
            <returns>An InstallPathMap with the described mapping.</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.BuildComponentPathMap(Microsoft.Deployment.WindowsInstaller.Database,Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap)">
            <summary>
            Builds a mapping from Component keys to installation paths.
            </summary>
            <param name="db">Installation database.</param>
            <param name="directoryPathMap">Directory mapping returned by
            <see cref="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.BuildDirectoryPathMap(Microsoft.Deployment.WindowsInstaller.Database,System.Boolean)"/>.</param>
            <returns>An InstallPathMap with the described mapping.</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.BuildDirectoryPathMap(Microsoft.Deployment.WindowsInstaller.Database,System.Boolean)">
            <summary>
            Builds a mapping from Directory keys to installation paths.
            </summary>
            <param name="db">Installation database.</param>
            <param name="useShortNames">true to use short directory names; false to use long names</param>
            <returns>An InstallPathMap with the described mapping.</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.BuildDirectoryPathMap(Microsoft.Deployment.WindowsInstaller.Database,System.Boolean,System.String,System.String)">
            <summary>
            Builds a mapping of Directory keys to directory paths, specifying root directories
            for the source and target paths.
            </summary>
            <param name="db">Database containing the Directory table.</param>
            <param name="useShortNames">true to use short directory names; false to use long names</param>
            <param name="sourceRootDir">The root directory path of all source paths, or null to leave them relative.</param>
            <param name="targetRootDir">The root directory path of all source paths, or null to leave them relative.</param>
            <returns>An InstallPathMap with the described mapping.</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.#ctor">
            <summary>
            Creates a new empty InstallPathMap.
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.Add(System.String,Microsoft.Deployment.WindowsInstaller.Package.InstallPath)">
            <summary>
            Sets an install path for a direcotry, component, or file key.
            </summary>
            <param name="key">Depending on the type of InstallPathMap, this is the primary key from the
            either the Directory, Component, or File table.</param>
            <param name="installPath">The install path of the key item.</param>
            <remarks>
            Changing an install path does not modify the Database used to generate this InstallPathMap.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.Remove(System.String)">
            <summary>
            Removes an install path from the map.
            </summary>
            <param name="key">Depending on the type of InstallPathMap, this is the primary key from the
            either the Directory, Component, or File table.</param>
            <returns>true if the item was removed, false if it did not exist</returns>
            <remarks>
            Changing an install path does not modify the Database used to generate this InstallPathMap.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.ContainsKey(System.String)">
            <summary>
            Tests whether a direcotry, component, or file key exists in the map.
            </summary>
            <param name="key">Depending on the type of InstallPathMap, this is the primary key from the
            either the Directory, Component, or File table.</param>
            <returns>true if the key is found; false otherwise</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.TryGetValue(System.String,Microsoft.Deployment.WindowsInstaller.Package.InstallPath@)">
            <summary>
            Attempts to get a value from the dictionary.
            </summary>
            <param name="key">The key to lookup.</param>
            <param name="value">Receives the value, or null if they key was not found.</param>
            <returns>True if the value was found, else false.</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.Clear">
            <summary>
            Removes all entries from the dictionary.
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.GetEnumerator">
            <summary>
            Gets an enumerator over all entries in the dictionary.
            </summary>
            <returns>An enumerator for the dictionary.</returns>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.SourcePaths">
            <summary>
            Gets a mapping from keys to source paths.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.TargetPaths">
            <summary>
            Gets a mapping from keys to target paths.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.Item(System.String)">
            <summary>
            Gets or sets an install path for a direcotry, component, or file key.
            </summary>
            <param name="key">Depending on the type of InstallPathMap, this is the primary key from the
            either the Directory, Component, or File table.</param>
            <remarks>
            Changing an install path does not modify the Database used to generate this InstallPathMap.
            </remarks>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.Keys">
            <summary>
            Gets the collection of keys in the InstallPathMap. Depending on the type of InstallPathMap,
            they are all directory, component, or file key strings.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.Values">
            <summary>
            Gets the collection of InstallPath values in the InstallPathMap.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.InstallPathMap.Count">
            <summary>
            Gets the number of entries in the dictionary.
            </summary>
        </member>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage">
            <summary>
            Provides access to convenient properties and operations on a patch package (.MSP).
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.#ctor(System.String)">
            <summary>
            Creates a new patch package object; opening the patch database in read-only mode.
            </summary>
            <param name="packagePath">Path to the patch package (.MSP)</param>
            <remarks>The PatchPackage object only opens the patch database in read-only mode, because
            transforms (sub-storages) cannot be read if the database is open in read-write mode.</remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.LogMessage(System.String,System.Object[])">
            <summary>
            Sends a message to the <see cref="E:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.Message"/> event-handler.
            </summary>
            <param name="format">Message string, containing 0 or more format items</param>
            <param name="args">Items to be formatted</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetReplacedPatchCodes">
            <summary>
            Gets the list of patch codes that are replaced by this patch package.
            </summary>
            <returns>Array of replaced patch codes (GUIDs)</returns>
            <remarks>
            The list of replaced patch codes is stored in the RevisionNumber field of the patch summary information.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetTargetProductCodes">
            <summary>
            Gets the list of product codes of products targeted by this patch package.
            </summary>
            <returns>Array of product codes (GUIDs)</returns>
            <remarks>
            The list of target product codes is stored in the Template field of the patch summary information.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetTransforms">
            <summary>
            Gets the names of the transforms included in the patch package.
            </summary>
            <returns>Array of transform names</returns>
            <remarks>
            The returned list does not include the &quot;patch special transforms&quot; that are prefixed with &quot;#&quot;
            <p>The list of transform names is stored in the LastSavedBy field of the patch summary information.</p>
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetTransforms(System.Boolean)">
            <summary>
            Gets the names of the transforms included in the patch package.
            </summary>
            <param name="includeSpecialTransforms">Specifies whether to include the
            &quot;patch special transforms&quot; that are prefixed with &quot;#&quot;</param>
            <returns>Array of transform names</returns>
            <remarks>
            The list of transform names is stored in the LastSavedBy field of the patch summary information.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetTransformsInfo">
            <summary>
            Gets information about the transforms included in the patch package.
            </summary>
            <returns>Array containing information about each transform</returns>
            <remarks>
            The returned info does not include the &quot;patch special transforms&quot; that are prefixed with &quot;#&quot;
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetTransformsInfo(System.Boolean)">
            <summary>
            Gets information about the transforms included in the patch package.
            </summary>
            <param name="includeSpecialTransforms">Specifies whether to include the
            &quot;patch special transforms&quot; that are prefixed with &quot;#&quot;</param>
            <returns>Array containing information about each transform</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetTransformInfo(System.String)">
            <summary>
            Gets information about a transforms included in the patch package.
            </summary>
            <param name="transform">Name of the transform to extract; this may optionally be a
            special transform prefixed by &quot;#&quot;</param>
            <returns>Information about the transform</returns>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.GetValidTransforms(Microsoft.Deployment.WindowsInstaller.Package.InstallPackage)">
            <summary>
            Analyzes the transforms included in the patch package to find the ones that
            are applicable to an install package.
            </summary>
            <param name="installPackage">The install package to validate the transforms against</param>
            <returns>Array of valid transform names</returns>
            <remarks>
            The returned list does not include the &quot;patch special transforms&quot; that
            are prefixed with &quot;#&quot; If a transform is valid, then its corresponding
            special transform is assumed to be valid as well.
            </remarks>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.ExtractTransform(System.String,System.String)">
            <summary>
            Extracts a transform (.MST) from a patch package.
            </summary>
            <param name="transform">Name of the transform to extract; this may optionally be a
            special transform prefixed by &quot;#&quot;</param>
            <param name="extractFile">Location where the transform will be extracted</param>
        </member>
        <member name="E:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.Message">
            <summary>
            Handle this event to receive status messages when operations are performed on the patch package.
            </summary>
            <example>
            <c>patchPackage.Message += new InstallPackageMessageHandler(Console.WriteLine);</c>
            </example>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.PatchPackage.PatchCode">
            <summary>
            Gets the patch code (GUID) of the patch package.
            </summary>
            <remarks>
            The patch code is stored in the RevisionNumber field of the patch summary information.
            </remarks>
        </member>
        <member name="T:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo">
            <summary>
            Contains properties of a transform package (.MST).
            </summary>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.#ctor(System.String)">
            <summary>
            Reads transform information from a transform package.
            </summary>
            <param name="mstFile">Path to a transform package (.MST file).</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.#ctor(System.String,Microsoft.Deployment.WindowsInstaller.SummaryInfo)">
            <summary>
            Reads transform information from the summary information of a transform package.
            </summary>
            <param name="name">Filename of the transform (optional).</param>
            <param name="transformSummaryInfo">Handle to the summary information of a transform package (.MST file).</param>
        </member>
        <member name="M:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.ToString">
            <summary>
            Returns the name of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.Name">
            <summary>
            Gets the filename of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.TargetProductCode">
            <summary>
            Gets the target product code of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.TargetProductVersion">
            <summary>
            Gets the target product version of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.UpgradeProductCode">
            <summary>
            Gets the upgrade product code of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.UpgradeProductVersion">
            <summary>
            Gets the upgrade product version of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.UpgradeCode">
            <summary>
            Gets the upgrade code of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.TargetPlatform">
            <summary>
            Gets the target platform of the transform.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.TargetLanguage">
            <summary>
            Gets the target language of the transform, or 0 if the transform is language-neutral.
            </summary>
        </member>
        <member name="P:Microsoft.Deployment.WindowsInstaller.Package.TransformInfo.Validations">
            <summary>
            Gets the validation flags specified when the transform was generated.
            </summary>
        </member>
    </members>
</doc>
