Move creation of hidden properties...
...for deferred CAs with HideTarget="yes" to the MSI backend where it belongs.
Bob Arnson committed
Nov 5, 2019 at 19:27 UTC
0f65aaaca2faf1b6fc233c445216d547f08c6fa5
4 files changed
+20
-13
src/WixToolset.Core.WindowsInstaller/Bind/CreateSpecialPropertiesCommand.cs
+12
-3
@@ -20,9 +20,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
20
public void Execute()
21
{
22
// Create lists of the properties that contribute to the special lists of properties.
23
- SortedSet<string> adminProperties = new SortedSet<string>();
24
- SortedSet<string> secureProperties = new SortedSet<string>();
25
- SortedSet<string> hiddenProperties = new SortedSet<string>();
23
+ var adminProperties = new SortedSet<string>();
24
+ var secureProperties = new SortedSet<string>();
25
+ var hiddenProperties = new SortedSet<string>();
26
27
foreach (var wixPropertyRow in this.Section.Tuples.OfType<WixPropertyTuple>())
28
{
@@ -42,6 +42,15 @@ namespace WixToolset.Core.WindowsInstaller.Bind
42
}
43
}
44
45
+ // Hide properties for in-script custom actions that have HideTarget set.
46
+ var hideTargetCustomActions = this.Section.Tuples.OfType<CustomActionTuple>().Where(
47
+ ca => ca.Hidden
48
+ && (ca.ExecutionType == CustomActionExecutionType.Deferred
49
+ || ca.ExecutionType == CustomActionExecutionType.Commit
50
+ || ca.ExecutionType == CustomActionExecutionType.Rollback))
51
+ .Select(ca => ca.Id.Id);
52
+ hiddenProperties.UnionWith(hideTargetCustomActions);
53
+
54
if (0 < adminProperties.Count)
55
{
56
var tuple = new PropertyTuple(null, new Identifier(AccessModifier.Private, "AdminProperties"));
src/WixToolset.Core/Compiler.cs
+1
-9
@@ -3561,6 +3561,7 @@ namespace WixToolset.Core
3561
PatchUninstall = patchUninstall,
3562
TSAware = tsAware,
3563
Win64 = win64,
3564
+ Hidden = hidden,
3565
};
3566
3567
this.Core.AddTuple(tuple);
@@ -3569,15 +3570,6 @@ namespace WixToolset.Core
3570
{
3571
this.Core.AddTuple(new WixSuppressModularizationTuple(sourceLineNumbers, id));
3572
}
3572
-
3573
- // For deferred CAs that specify HideTarget we should also hide the CA data property for the action.
3574
- if (hidden &&
3575
- (CustomActionExecutionType.Deferred == executionType ||
3576
- CustomActionExecutionType.Commit == executionType ||
3577
- CustomActionExecutionType.Rollback == executionType))
3578
- {
3579
- this.AddWixPropertyRow(sourceLineNumbers, id, false, false, hidden);
3580
- }
3573
}
3574
}
3575
src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs
+5
@@ -3,6 +3,7 @@
3
namespace WixToolsetTest.CoreIntegration
4
{
5
using System.IO;
6
+ using System.Linq;
7
using WixBuildTools.TestSupport;
8
using WixToolset.Core.TestPackage;
9
using Xunit;
@@ -281,8 +282,12 @@ namespace WixToolsetTest.CoreIntegration
282
{
283
"Binary:Binary1\t[Binary data]",
284
"CustomAction:CustomAction1\t1\tBinary1\tInvalidEntryPoint\t",
285
+ "CustomAction:CustomActionWithHiddenTarget\t9217\tBinary1\tInvalidEntryPoint\t",
286
"CustomAction:DiscardOptimismAllBeingsWhoProceed\t19\t\tAbandon hope all ye who enter here.\t",
287
}, results);
288
+ var properties = Query.QueryDatabase(msiPath, new[] { "Property" });
289
+ var hiddenProperties = properties.Where(q => q.StartsWith("Property:MsiHiddenProperties")).Single();
290
+ Assert.Equal("Property:MsiHiddenProperties\tCustomActionWithHiddenTarget", hiddenProperties);
291
}
292
}
293
src/test/WixToolsetTest.CoreIntegration/TestData/CustomAction/UnscheduledCustomAction.wxs
+2
-1
@@ -6,7 +6,8 @@
6
</ComponentGroup>
7
8
<Binary Id="Binary1" SourceFile="test.txt"></Binary>
9
- <CustomAction Id="CustomAction1" BinaryKey="Binary1" DllEntry="InvalidEntryPoint"></CustomAction>
9
+ <CustomAction Id="CustomAction1" BinaryKey="Binary1" DllEntry="InvalidEntryPoint" />
10
<CustomAction Id="DiscardOptimismAllBeingsWhoProceed" Error="Abandon hope all ye who enter here." />
11
+ <CustomAction Id="CustomActionWithHiddenTarget" BinaryKey="Binary1" DllEntry="InvalidEntryPoint" Execute="deferred" HideTarget="yes" />
12
</Fragment>
13
</Wix>