Import code from old v4 repo
Sean Hall committed
Feb 2, 2019 at 15:13 UTC
d694ea725efa855edfca0863cf462b1c0f26c156
12 files changed
+507
src/wixext/DifxAppCompiler.cs
new
+148
@@ -0,0 +1,148 @@
1
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
+
3
+namespace WixToolset.Extensions
4
+{
5
+ using System;
6
+ using System.Collections.Generic;
7
+ using System.Xml.Linq;
8
+ using WixToolset.Data;
9
+ using WixToolset.Extensibility;
10
+
11
+ /// <summary>
12
+ /// The compiler for the WiX Toolset Driver Install Frameworks for Applications Extension.
13
+ /// </summary>
14
+ public sealed class DifxAppCompiler : CompilerExtension
15
+ {
16
+ private HashSet<string> components;
17
+
18
+ /// <summary>
19
+ /// Instantiate a new DifxAppCompiler.
20
+ /// </summary>
21
+ public DifxAppCompiler()
22
+ {
23
+ this.Namespace = "http://wixtoolset.org/schemas/v4/wxs/difxapp";
24
+ this.components = new HashSet<string>();
25
+ }
26
+
27
+ /// <summary>
28
+ /// Processes an element for the Compiler.
29
+ /// </summary>
30
+ /// <param name="sourceLineNumbers">Source line number for the parent element.</param>
31
+ /// <param name="parentElement">Parent element of element to process.</param>
32
+ /// <param name="element">Element to process.</param>
33
+ /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
34
+ public override void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context)
35
+ {
36
+ switch (parentElement.Name.LocalName)
37
+ {
38
+ case "Component":
39
+ string componentId = context["ComponentId"];
40
+ string directoryId = context["DirectoryId"];
41
+
42
+ switch (element.Name.LocalName)
43
+ {
44
+ case "Driver":
45
+ this.ParseDriverElement(element, componentId);
46
+ break;
47
+ default:
48
+ this.Core.UnexpectedElement(parentElement, element);
49
+ break;
50
+ }
51
+ break;
52
+ default:
53
+ this.Core.UnexpectedElement(parentElement, element);
54
+ break;
55
+ }
56
+ }
57
+
58
+ /// <summary>
59
+ /// Parses a Driver element.
60
+ /// </summary>
61
+ /// <param name="node">Element to parse.</param>
62
+ /// <param name="componentId">Identifier for parent component.</param>
63
+ private void ParseDriverElement(XElement node, string componentId)
64
+ {
65
+ SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
66
+ int attributes = 0;
67
+ int sequence = CompilerConstants.IntegerNotSet;
68
+
69
+ // check the number of times a Driver element has been nested under this Component element
70
+ if (null != componentId)
71
+ {
72
+ if (this.components.Contains(componentId))
73
+ {
74
+ this.Core.OnMessage(WixErrors.TooManyElements(sourceLineNumbers, "Component", node.Name.LocalName, 1));
75
+ }
76
+ else
77
+ {
78
+ this.components.Add(componentId);
79
+ }
80
+ }
81
+
82
+ foreach (XAttribute attrib in node.Attributes())
83
+ {
84
+ if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
85
+ {
86
+ switch (attrib.Name.LocalName)
87
+ {
88
+ case "AddRemovePrograms":
89
+ if (YesNoType.No == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
90
+ {
91
+ attributes |= 0x4;
92
+ }
93
+ break;
94
+ case "DeleteFiles":
95
+ if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
96
+ {
97
+ attributes |= 0x10;
98
+ }
99
+ break;
100
+ case "ForceInstall":
101
+ if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
102
+ {
103
+ attributes |= 0x1;
104
+ }
105
+ break;
106
+ case "Legacy":
107
+ if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
108
+ {
109
+ attributes |= 0x8;
110
+ }
111
+ break;
112
+ case "PlugAndPlayPrompt":
113
+ if (YesNoType.No == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
114
+ {
115
+ attributes |= 0x2;
116
+ }
117
+ break;
118
+ case "Sequence":
119
+ sequence = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
120
+ break;
121
+ default:
122
+ this.Core.UnexpectedAttribute(node, attrib);
123
+ break;
124
+ }
125
+ }
126
+ else
127
+ {
128
+ this.Core.ParseExtensionAttribute(node, attrib);
129
+ }
130
+ }
131
+
132
+ this.Core.ParseForExtensionElements(node);
133
+
134
+ if (!this.Core.EncounteredError)
135
+ {
136
+ Row row = this.Core.CreateRow(sourceLineNumbers, "MsiDriverPackages");
137
+ row[0] = componentId;
138
+ row[1] = attributes;
139
+ if (CompilerConstants.IntegerNotSet != sequence)
140
+ {
141
+ row[2] = sequence;
142
+ }
143
+
144
+ this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "MsiProcessDrivers");
145
+ }
146
+ }
147
+ }
148
+}
src/wixext/DifxAppDecompiler.cs
new
+96
@@ -0,0 +1,96 @@
1
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
+
3
+namespace WixToolset.Extensions
4
+{
5
+ using System;
6
+ using System.Collections;
7
+ using System.Globalization;
8
+ using WixToolset.Data;
9
+ using WixToolset.Extensibility;
10
+ using DifxApp = WixToolset.Extensions.Serialize.DifxApp;
11
+ using Wix = WixToolset.Data.Serialize;
12
+
13
+ /// <summary>
14
+ /// The decompiler for the WiX Toolset Driver Install Frameworks for Applications Extension.
15
+ /// </summary>
16
+ public sealed class DifxAppDecompiler : DecompilerExtension
17
+ {
18
+ /// <summary>
19
+ /// Creates a decompiler for Gaming Extension.
20
+ /// </summary>
21
+ public DifxAppDecompiler()
22
+ {
23
+ this.TableDefinitions = DifxAppExtensionData.GetExtensionTableDefinitions();
24
+ }
25
+
26
+ /// <summary>
27
+ /// Decompiles an extension table.
28
+ /// </summary>
29
+ /// <param name="table">The table to decompile.</param>
30
+ public override void DecompileTable(Table table)
31
+ {
32
+ switch (table.Name)
33
+ {
34
+ case "MsiDriverPackages":
35
+ this.DecompileMsiDriverPackagesTable(table);
36
+ break;
37
+ default:
38
+ base.DecompileTable(table);
39
+ break;
40
+ }
41
+ }
42
+
43
+ /// <summary>
44
+ /// Decompile the MsiDriverPackages table.
45
+ /// </summary>
46
+ /// <param name="table">The table to decompile.</param>
47
+ private void DecompileMsiDriverPackagesTable(Table table)
48
+ {
49
+ foreach (Row row in table.Rows)
50
+ {
51
+ DifxApp.Driver driver = new DifxApp.Driver();
52
+
53
+ int attributes = (int)row[1];
54
+ if (0x1 == (attributes & 0x1))
55
+ {
56
+ driver.ForceInstall = DifxApp.YesNoType.yes;
57
+ }
58
+
59
+ if (0x2 == (attributes & 0x2))
60
+ {
61
+ driver.PlugAndPlayPrompt = DifxApp.YesNoType.no;
62
+ }
63
+
64
+ if (0x4 == (attributes & 0x4))
65
+ {
66
+ driver.AddRemovePrograms = DifxApp.YesNoType.no;
67
+ }
68
+
69
+ if (0x8 == (attributes & 0x8))
70
+ {
71
+ driver.Legacy = DifxApp.YesNoType.yes;
72
+ }
73
+
74
+ if (0x10 == (attributes & 0x10))
75
+ {
76
+ driver.DeleteFiles = DifxApp.YesNoType.yes;
77
+ }
78
+
79
+ if (null != row[2])
80
+ {
81
+ driver.Sequence = (int)row[2];
82
+ }
83
+
84
+ Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[0]);
85
+ if (null != component)
86
+ {
87
+ component.AddChild(driver);
88
+ }
89
+ else
90
+ {
91
+ this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component", (string)row[0], "Component"));
92
+ }
93
+ }
94
+ }
95
+ }
96
+}
src/wixext/DifxAppExtensionData.cs
new
+43
@@ -0,0 +1,43 @@
1
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
+
3
+namespace WixToolset.Extensions
4
+{
5
+ using System;
6
+ using System.Reflection;
7
+ using WixToolset.Data;
8
+ using WixToolset.Extensibility;
9
+
10
+ /// <summary>
11
+ /// The WiX Toolset Driver Install Frameworks for Applications Extension.
12
+ /// </summary>
13
+ public sealed class DifxAppExtensionData : ExtensionData
14
+ {
15
+ private static TableDefinitionCollection tableDefinitions;
16
+
17
+ /// <summary>
18
+ /// Gets the optional table definitions for this extension.
19
+ /// </summary>
20
+ /// <value>The optional table definitions for this extension.</value>
21
+ public override TableDefinitionCollection TableDefinitions
22
+ {
23
+ get
24
+ {
25
+ return DifxAppExtensionData.GetExtensionTableDefinitions();
26
+ }
27
+ }
28
+
29
+ /// <summary>
30
+ /// Internal mechanism to access the extension's table definitions.
31
+ /// </summary>
32
+ /// <returns>Extension's table definitions.</returns>
33
+ internal static TableDefinitionCollection GetExtensionTableDefinitions()
34
+ {
35
+ if (null == DifxAppExtensionData.tableDefinitions)
36
+ {
37
+ DifxAppExtensionData.tableDefinitions = ExtensionData.LoadTableDefinitionHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.tables.xml");
38
+ }
39
+
40
+ return DifxAppExtensionData.tableDefinitions;
41
+ }
42
+ }
43
+}
src/wixext/WixDifxAppExtension.csproj
new
+47
@@ -0,0 +1,47 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
+
4
+
5
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
6
+ <PropertyGroup>
7
+ <ProjectGuid>{2256EFD7-E678-4485-818D-986D590068BE}</ProjectGuid>
8
+ <AssemblyName>WixDifxAppExtension</AssemblyName>
9
+ <OutputType>Library</OutputType>
10
+ <RootNamespace>WixToolset.Extensions</RootNamespace>
11
+ </PropertyGroup>
12
+ <ItemGroup>
13
+ <Compile Include="AssemblyInfo.cs" />
14
+ <Compile Include="DifxAppCompiler.cs" />
15
+ <Compile Include="DifxAppDecompiler.cs" />
16
+ <Compile Include="DifxAppExtensionData.cs" />
17
+ <EmbeddedFlattenedResource Include="Data\tables.xml">
18
+ <LogicalName>$(RootNamespace).Data.tables.xml</LogicalName>
19
+ </EmbeddedFlattenedResource>
20
+ <EmbeddedFlattenedResource Include="Xsd\difxapp.xsd">
21
+ <LogicalName>$(RootNamespace).Xsd.difxapp.xsd</LogicalName>
22
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
23
+ </EmbeddedFlattenedResource>
24
+ <XsdGenSource Include="Xsd\difxapp.xsd">
25
+ <SubType>Designer</SubType>
26
+ <CommonNamespace>WixToolset.Data.Serialize</CommonNamespace>
27
+ <Namespace>WixToolset.Extensions.Serialize.DifxApp</Namespace>
28
+ </XsdGenSource>
29
+ </ItemGroup>
30
+ <ItemGroup>
31
+ <Reference Include="System" />
32
+ <Reference Include="System.Xml" />
33
+ <Reference Include="System.Xml.Linq" />
34
+ <ProjectReference Include="..\..\..\libs\WixToolset.Data\WixToolset.Data.csproj" />
35
+ <ProjectReference Include="..\..\..\libs\WixToolset.Extensibility\WixToolset.Extensibility.csproj" />
36
+ <ProjectReference Include="..\..\..\tools\wix\Wix.csproj" />
37
+ <ProjectReference Include="..\wixlib\DIFxAppExtension.wixproj">
38
+ <Properties>Platform=x86</Properties>
39
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
40
+ </ProjectReference>
41
+ <ProjectReference Include="..\wixlib\DIFxAppExtension.wixproj">
42
+ <Properties>Platform=x64</Properties>
43
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
44
+ </ProjectReference>
45
+ </ItemGroup>
46
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
47
+</Project>
src/wixext/difxapp.xsd
new
+108
@@ -0,0 +1,108 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
+
4
+
5
+<xs:schema xmlns:html="http://www.w3.org/1999/xhtml"
6
+ xmlns:wix="http://wixtoolset.org/schemas/v4/wxs"
7
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
8
+ xmlns:xse=" http://wixtoolset.org/schemas/XmlSchemaExtension"
9
+ targetNamespace="http://wixtoolset.org/schemas/v4/wxs/difxapp"
10
+ xmlns="http://wixtoolset.org/schemas/v4/wxs/difxapp">
11
+ <xs:annotation>
12
+ <xs:documentation>
13
+ The source code schema for the WiX Toolset Driver Install Frameworks for Applications Extension.
14
+ </xs:documentation>
15
+ </xs:annotation>
16
+
17
+ <xs:import namespace="http://wixtoolset.org/schemas/v4/wxs" />
18
+
19
+ <xs:element name="Driver">
20
+ <xs:annotation>
21
+ <xs:appinfo>
22
+ <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" />
23
+ </xs:appinfo>
24
+ <xs:documentation>
25
+ Installs a driver. To use this element, you need to reference the WixDifxAppExtension extension and add the
26
+ .wixlib appropriate for the target platform (difxapp_x86.wixlib or difxapp_x64.wixlib)
27
+ to your project.
28
+ </xs:documentation>
29
+ </xs:annotation>
30
+ <xs:complexType>
31
+ <xs:attribute name="AddRemovePrograms" type="YesNoType">
32
+ <xs:annotation>
33
+ <xs:documentation>
34
+ Specifies that the DIFxApp CustomActions should add an entry in the Add/Remove Programs Control
35
+ Panel applet. The default is 'yes'.
36
+ </xs:documentation>
37
+ </xs:annotation>
38
+ </xs:attribute>
39
+ <xs:attribute name="DeleteFiles" type="YesNoType">
40
+ <xs:annotation>
41
+ <xs:documentation>
42
+ If set to "yes", configures DIFxApp to delete binary files that were copied to the system from the driver
43
+ store when a driver package was installed. If this attribute is set to "no" or not present, DIFxApp does not
44
+ remove these files from a system. Note that configuring DIFxApp to delete these files is controlled by the
45
+ Flags entry value of the component that represents the driver package in the MsiDriverPackages custom table.
46
+ Setting DeleteFiles to "yes" sets the corresponding bit in the Flags entry value. Setting DeleteFiles to "no"
47
+ clears the corresponding bit in the Flags entry value. If this attribute is not present, DIFxApp uses a
48
+ default value of "no".
49
+ </xs:documentation>
50
+ </xs:annotation>
51
+ </xs:attribute>
52
+ <xs:attribute name="ForceInstall" type="YesNoType">
53
+ <xs:annotation>
54
+ <xs:documentation>
55
+ Specifies that the DIFxApp CustomActions should force the installation of a new Plug and Play driver
56
+ on a device, even if the currently installed driver on the device is a better match than the new driver.
57
+ Specifying 'no' is an excellent way to ensure the DIFxApp CustomActions recognize the Component contains
58
+ a driver for installation. The default is null which means the Component does not install a driver via
59
+ DIFxApp CustomActions. See <html:a href='http://www.microsoft.com/whdc/driver/install/difxtools.mspx'>http://www.microsoft.com/whdc/driver/install/difxtools.mspx</html:a>
60
+ for more information.
61
+ </xs:documentation>
62
+ </xs:annotation>
63
+ </xs:attribute>
64
+ <xs:attribute name="Legacy" type="YesNoType">
65
+ <xs:annotation>
66
+ <xs:documentation>
67
+ If set to "yes", configures DIFxApp to install unsigned driver packages and driver packages with missing
68
+ files. For more information, see "Installing Unsigned Driver Packages in Legacy Mode" earlier in this paper.
69
+ If this attribute is set to "no" or not present, DIFxApp will install only signed driver packages. Note
70
+ that configuring DIFxApp to install unsigned drivers is controlled by the Flags entry value of the component
71
+ that represents the driver package in the MsiDriverPackages custom table. Setting Legacy to "yes" sets
72
+ the corresponding bit in the Flags entry value. Setting Legacy to "no" clears the bit in the Flags
73
+ entry value that configures DIFxApp to install unsigned driver packages. If this attribute is not present,
74
+ DIFxApp uses a default value of "no".
75
+ </xs:documentation>
76
+ </xs:annotation>
77
+ </xs:attribute>
78
+ <xs:attribute name="PlugAndPlayPrompt" type="YesNoType">
79
+ <xs:annotation>
80
+ <xs:documentation>
81
+ Specifies that the DIFxApp CustomActions should prompt the user to connect the Plug and Play
82
+ device if it is not connected. The default is 'yes'.
83
+ </xs:documentation>
84
+ </xs:annotation>
85
+ </xs:attribute>
86
+ <xs:attribute name="Sequence" type="xs:integer">
87
+ <xs:annotation>
88
+ <xs:documentation>
89
+ Specifies an optional installation sequence number. DIFxApp CustomActions install the driver packages in
90
+ an installation package in the order of increasing sequence numbers. The same sequence number can be used
91
+ for more than one driver; however, the order in which packages with the same sequence number are actually
92
+ installed cannot be determined.
93
+ </xs:documentation>
94
+ </xs:annotation>
95
+ </xs:attribute>
96
+ </xs:complexType>
97
+ </xs:element>
98
+
99
+ <xs:simpleType name="YesNoType">
100
+ <xs:annotation>
101
+ <xs:documentation>Values of this type will either be "yes" or "no".</xs:documentation>
102
+ </xs:annotation>
103
+ <xs:restriction base='xs:NMTOKEN'>
104
+ <xs:enumeration value="no"/>
105
+ <xs:enumeration value="yes"/>
106
+ </xs:restriction>
107
+ </xs:simpleType>
108
+</xs:schema>
src/wixext/tables.xml
new
+14
@@ -0,0 +1,14 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
+
4
+
5
+<tableDefinitions xmlns="http://wixtoolset.org/schemas/v4/wi/tables">
6
+ <tableDefinition name="MsiDriverPackages">
7
+ <columnDefinition name="Component" type="string" length="72" primaryKey="yes" modularize="column"
8
+ keyTable="Component" keyColumn="1" category="identifier" description="Name of the component that represents the driver package"/>
9
+ <columnDefinition name="Flags" type="number" length="4"
10
+ minValue="0" maxValue="31" description="Flags for installing and uninstalling driver packages"/>
11
+ <columnDefinition name="Sequence" type="number" length="4" nullable="yes"
12
+ minValue="0" description="Order in which the driver packages are processed"/>
13
+ </tableDefinition>
14
+</tableDefinitions>
src/wixlib/DIFxAppExtension.wixproj
new
+30
@@ -0,0 +1,30 @@
1
+<?xml version="1.0" encoding="utf-8" ?>
2
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
+
4
+
5
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
6
+ <PropertyGroup>
7
+ <ProjectGuid>{5066EB93-D8F7-4FAE-B687-024D7A81BD95}</ProjectGuid>
8
+ <OutputName>difxapp_$(Platform)</OutputName>
9
+ <OutputType>Library</OutputType>
10
+ <BindFiles>true</BindFiles>
11
+ <Pedantic>true</Pedantic>
12
+ <Cultures>en-us</Cultures>
13
+ </PropertyGroup>
14
+
15
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.props" />
16
+
17
+ <PropertyGroup>
18
+ <DefineConstants>
19
+ $(DefineConstants);
20
+ DIFxAppDll=$(ProjectDir)$(Platform)\DIFxApp.dll;
21
+ DIFxAppADll=$(ProjectDir)$(Platform)\DIFxAppA.dll;
22
+ </DefineConstants>
23
+ </PropertyGroup>
24
+
25
+ <ItemGroup>
26
+ <Compile Include="DIFxAppExtension.wxs" />
27
+ </ItemGroup>
28
+
29
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
30
+</Project>
src/wixlib/DIFxAppExtension.wxs
new
+21
@@ -0,0 +1,21 @@
1
+<?xml version='1.0'?>
2
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
+
4
+
5
+<Wix xmlns='http://wixtoolset.org/schemas/v4/wxs'>
6
+ <Fragment Id='DIFxAppCustomActions'>
7
+ <InstallExecuteSequence>
8
+ <Custom Action='MsiProcessDrivers' After='InstallFiles'>VersionNT > 400</Custom>
9
+ <Custom Action='MsiCleanupOnSuccess' After='InstallFinalize'>VersionNT > 400</Custom>
10
+ </InstallExecuteSequence>
11
+
12
+ <Binary Id='DIFxApp.dll' SourceFile='$(var.DIFxAppDll)'/>
13
+ <Binary Id='DIFxAppA.dll' SourceFile='$(var.DIFxAppADll)'/>
14
+
15
+ <CustomAction Id='MsiProcessDrivers' BinaryKey='DIFxApp.dll' DllEntry='ProcessDriverPackages' SuppressModularization='yes' Execute='immediate' />
16
+ <CustomAction Id='MsiInstallDrivers' BinaryKey='DIFxAppA.dll' DllEntry='InstallDriverPackages' SuppressModularization='yes' Execute='deferred' Impersonate='no' />
17
+ <CustomAction Id='MsiUninstallDrivers' BinaryKey='DIFxAppA.dll' DllEntry='UninstallDriverPackages' SuppressModularization='yes' Execute='deferred' Impersonate='no' />
18
+ <CustomAction Id='MsiRollbackInstall' BinaryKey='DIFxAppA.dll' DllEntry='RollbackInstall' SuppressModularization='yes' Execute='rollback' Impersonate='no' />
19
+ <CustomAction Id='MsiCleanupOnSuccess' BinaryKey='DIFxApp.dll' DllEntry='CleanupOnSuccess' SuppressModularization='yes' Execute='immediate' />
20
+ </Fragment>
21
+</Wix>
src/wixlib/x64/DIFxApp.dll
Binary files /dev/null and b/src/wixlib/x64/DIFxApp.dll differ
src/wixlib/x64/DIFxAppA.dll
Binary files /dev/null and b/src/wixlib/x64/DIFxAppA.dll differ
src/wixlib/x86/DIFxApp.dll
Binary files /dev/null and b/src/wixlib/x86/DIFxApp.dll differ
src/wixlib/x86/DIFxAppA.dll
Binary files /dev/null and b/src/wixlib/x86/DIFxAppA.dll differ