+ When installing a native assembly, all components + contained in the assembly must be represented as ComPlusComponent elements + under this element. Any component not listed will not be removed during + uninstall. +
+ ++ The fields DllPath, TlbPath and PSDllPath are formatted + fields that should contain file paths to there respective file types. A typical + value for DllPath for example, should be something like “[#MyAssembly_dll]”, + where “MyAssembly_dll” is the key of the dll file in the File table. +
+ ++ Warning: The assembly name provided in the AssemblyName + attribute must be a fully specified assembly name, if a partial name is + provided a random assembly matching the partial name will be selected. +
++ Values should be in the format *ResourceName,StringName*, where *ResourceName* + is the name of the embedded resource in your assembly sans the ".resources" extension, and *StringName* + is the name of the string resource in the embedded resource. +
++ Example: UtilityMshSnapInResources,Description +
++ The custom action that implements RemoveFolderEx does so by writing temporary rows to the RemoveFile table + for each subfolder of the root folder you specify. Because it might dramatically affect Windows Installer's + [File Costing](https://learn.microsoft.com/en-us/windows/win32/msi/file-costing), + the temporary rows must be written before the CostInitialize standard action. Unfortunately, MSI doesn't + create properties for the Directory hierarchy in your package until later, in the CostFinalize action. +
++ An easy workaround for a typical use case of removing a folder during uninstall is to write the directory + path to the registry and to load it during uninstall. See [The WiX toolset's "Remember Property" pattern](http://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern) + for an example. +
++ If you use custom actions to set properties, ensure that they are scheduled before the WixRemoveFoldersEx custom action. +
+Warning: this is intended for testing purposes only. Shipping a patch with all changes negates the benefits of using patch families for including only specific changes.
+Because changing the ProductCode is not supported in a patch, the ProductCode property is automatically removed from the transform.
++ This provider key is designed to persist throughout compatible upgrades so that dependent bundles do not have to be reinstalled + and will not prevent your product from being upgraded. If this attribute is not authored, the value is the + automatically-generated bundle ID and will not automatically support upgrades. +
++ Only a single provider key is supported for bundles. To author that your bundle provides additional features via + packages, author different provider keys for your packages. +
+CompilerExtension.ParseElement()
+ method will be called with the package identifier as the first value in
+ contextValues.
+ The URL to use to download the package. The following substitutions are supported:
+CompilerExtension.ParseAttribute()
+ method will be called with the package identifier in
+ contextValues["PackageId"].
+ The URL to use to download the package. The following substitutions are supported:
+The URL to use to download the container. This attribute is only valid when the container is detached. The + following substitutions are supported:
+A reference to another DirectorySearch element must reference the same Id, the same Parent Id, and the same Path. If any of these attribute values are different you must instead use a DirectorySearch element.
+CompilerExtension.ParseElement()
+ method will be called with the package identifier as the first value in
+ contextValues.
+ A reference to another FileSearch element must reference the same Id and the same Parent Id. If any of these attribute values are different you must instead use a FileSearch element.
+CompilerExtension.ParseElement()
+ method will be called with the package identifier as the first value in
+ contextValues.
+ CompilerExtension.ParseElement()
+ method will be called with the package identifier as the first value in
+ contextValues.
+ CompilerExtension.ParseElement()
+ method will be called with the package identifier as the first value in
+ contextValues.
+ The attributes are used to write the following registry values to the key:
+ SOFTWARE\[Manufacturer]\Updates\[ProductFamily]\[Name]
You can specify any valid Windows code page by integer like 1252, or by web name like Windows-1252. See [Code pages](../../../tools/codepage/) for more information.
+You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See [Code pages](../../../tools/codepage/) for more information.
+The ClientPatchId attribute allows you to specify an easily referenced identity that you can use in product authoring. This identity prefixes properties added by WiX to a patch transform, such as ClientPatchId.PatchCode and ClientPatchId.AllowRemoval. If the patch code GUID is auto-generated you could not reference any properties using this auto-generated prefix.
+For example, if you were planning to ship a patch referred to as "QFE1" and needed to write your own registry values for Add/Remove Programs in product authoring such as the UninstallString for this patch, you could author a RegistryValue with the name UninstallString and the value [SystemFolder]msiexec.exe /package [ProductCode] /uninstall [QFE1.PatchCode]. In your patch authoring you would then set ClientPatchId to "QFE1" and WiX will add the QFE1.PatchCode property to the patch transform when the patch is created. If the Id attribute specified the patch code to be generated automatically, you could not reference the prefix.PatchCode property as shown above.
The summary information is automatically populated from attribute values of the Patch element including the code page. If you want to override some of these summary information properties or use a different code page for the summary information itself, author the PatchInformation element.
+You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See [Code pages](../../../tools/codepage/) for more information.
+The URL to use to download the package. The following substitutions are supported:
++ When the Type attribute value is 'directory' the registry value must specify the path to a directory excluding the file name. + When the Type attribute value is 'file' the registry value must specify the path to a file including the file name; + however, if there is no child FileSearch element the parent directory of the file is returned. The FileSearch element requires + that you author the name of the file you are searching for. If you do not know the file name + you must set the Type attribute to 'raw' to return the full file path including the file name. +
++ This element declares a dependency on any product that uses the Provides element. If that product is uninstalled + before a product that requires it, the uninstall will err or warn the user that other products are installed + which depend on that product. This behavior can be modified by changing the attribute values on the Requires element. +
++ If you do not nest this element under a Provides element, you must specify the @Id attribute + so that it can be referenced by a RequiresRef element nested under a Provides element. +
++ This element references a dependency on any product that uses the Provides element. If that product is uninstalled + before a product that requires it, the uninstall will err or warn the user that other products are installed + which depend on that product. This behavior can be modified by changing the attribute values on the Requires element. +
+CompilerExtension.ParseElement()
+ method will be called with the rollback boundary identifier as the 'RollbackBoundaryId' key in
+ contextValues.
+ You can also specify that any MspPackage elements in the chain are automatically slipstreamed by setting the Slipstream attribute of an MspPackage to "yes". This will reduce the amount of authoring you need to write and will determine which msi packages can slipstream patches when building a bundle.
+You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See [Code pages](../../../tools/codepage/) for more information.
+A transform contains the differences between the target product and the upgraded product. When a transform or a patch (which contains transforms) is applied, the following properties of the installed product are validated against the properties of the target product stored in a transform.
+Windows Installer simply validates that the ProductCode, ProductLanguage, and UpgradeCode of an installed product are equivalent to those propeties of the target product used to create the transform; however, the ProductVersion can be validated with a greater range of comparisons.
+You can compare up to the first three fields of the ProductVersion. Changes to the fourth field are not validated and are useful for small updates. You can also choose how to compare the target ProductVersion used to create the transform with the installed ProductVersion. For example, while the default value of 'Equals' is recommended, if you wanted a minor upgrade patch to apply to the target ProductVersion and all older products with the same ProductCode, you would use 'LesserOrEqual'.
+You can specify any valid Windows code page by integer like 1252, or by web name like Windows-1252 or iso-8859-1. See [Code pages](../../../tools/codepage/) for more information.
+