Wizard.ShouldSkip matched the F.Tunnel feature id literally, so ADDLOCAL=ALL
(which installs every feature, Agent Tunnel included) wrongly skipped the Agent
Tunnel dialog. Also recognize the ALL keyword. Tokens are matched case-sensitively,
the same way Windows Installer matches ADDLOCAL feature names and the ALL keyword,
keeping the dialog decision in lockstep with whether MSI will actually install the
feature (and therefore run EnrollAgentTunnel).
Empty enrollment string intentionally keeps failing the install: the Agent Tunnel
feature is opt-in (not installed by default), so selecting it without a string is a
misconfiguration that should surface, not be silently skipped.
What
Wizard.ShouldSkipdecided whether to skip the Agent Tunnel wizard dialog by matching theF.Tunnelfeature id literally inADDLOCAL.ADDLOCAL=ALLinstalls every feature (Agent Tunnel included) without naming them, so the dialog was wrongly skipped — the operator never got a chance to enter an enrollment string even though the tunnel feature was being installed.ShouldSkipnow also recognizes theALLkeyword. Tokens are matched case-sensitively, the same way Windows Installer matchesADDLOCALfeature names and theALLkeyword, so the dialog decision stays in lockstep with whether MSI will actually install the feature (and therefore runEnrollAgentTunnel).Why
From Benoit's post-merge audit of #1789 (finding P9).
Verification
Truth table over
ALL/all/F.Tunnel/f.tunnel/F.Agent,F.Tunnel/F.Agent/ empty — every case now agrees with MSI's actual (case-sensitive) install decision: correctly-casedALL/F.Tunnelshow the dialog, anything that wouldn't install the feature skips it. The interactive path never emitsADDLOCAL=ALL(it writes explicit feature names), so theALLbranch only matters for command-line installs.Note
An earlier revision of this branch also changed the empty-enrollment-string behavior (audit finding P2) to a silent no-op skip. That was reverted — an empty enrollment string keeps failing the install intentionally: the Agent Tunnel feature is opt-in (not installed by default), so selecting it without a string is a misconfiguration that should surface rather than be silently skipped. Context: #1789 (comment)