As an alternative to the method described by @sttaq, what I usually do is filter out the .exe files and manage them manually. You're already filtering your heat output with an xsl file (Filter.xsl), so it should be easy to add a rule to filter out any *.exe file.
<!--Match and ignore .exe files-->
<xsl:key name="exe-search" match="wix:Component[contains(wix:File/@Source, '.exe')]" use="@Id"/>
<xsl:template match="wix:Component[key('exe-search', @Id)]"/>
<xsl:template match="wix:ComponentRef[key('exe-search', @Id)]"/>
And then, in your .wxs file, you can manually author the .exe file component including your service installer, icons, or anything you may need. Just remember to put it inside the right Directory:
<Fragment>
<DirectoryRef Id="dirA9BC717C5B7BCAAF2B4C1161965AD894">
<Component Id="ExecFileComponent" Guid="YOUR-GUID-HERE">
<RemoveFile Id="RemoveLogFiles" Name="*.svclog" On="both"/>
<File Id="ExecFile" Source="$(exefile)" KeyPath="yes" />
<ServiceInstall Id="ServiceInstallation" DisplayName="displayname" Name="name" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes">
<util:PermissionEx
User="Everyone"
GenericAll="yes"
ServiceChangeConfig="yes"
ServiceEnumerateDependents="yes"
ChangePermission="yes"
ServiceInterrogate="yes"
ServicePauseContinue="yes"
ServiceQueryConfig="yes"
ServiceQueryStatus="yes"
ServiceStart="yes"
ServiceStop="yes" />
</ServiceInstall>
<ServiceControl Id="ServiceControl" Name="name" Stop="both" Remove="uninstall" />
</Component>
</DirectoryRef>
</Fragment>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…