Sto usando HeatDirectory per creare il file .wxs di origine. Nella directory di prelievo è presente un exe che deve essere installato come servizio. In realtà so come installare il servizio se creo il componente da solo, ma non so come includere ServiceInstall nel componente generato automaticamente. C'è qualche suggerimento?wix HeatDirectory ServiceInstall
<HeatDirectory DirectoryRefId="Guardian" OutputFile="Source\GuardianSource.wxs" Transforms="Filter.xsl" Directory="..\Setup\C24.Guardian\bin\Debug" PreprocessorVariable="var.GuardianPath" ComponentGroupName="GuardianGroup" ToolPath="$(WixToolPath)" SuppressCom="true" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" AutoGenerateGuids="true" GenerateGuidsNow="false">
</HeatDirectory>
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="Guardian">
<Component Id="cmp70BEDA00F3161F3FB5E847EB1136B1D5" Guid="*">
<File Id="fil26DCBF1E4218C7363018FBA2CD456633" KeyPath="yes" Source="$(var.GuardianPath)\C24.Guardian.exe" />
</Component>
<Component Id="cmp2EE8126A193FA022ED35FAD8F182E65A" Guid="*">
<File Id="fil785CD681C496EDDAB457E8314C49D686" KeyPath="yes" Source="$(var.GuardianPath)\C24.Guardian.exe.config" />
</Component>
<Component Id="cmp0CC91B457FBC44F978A2AD6B24043DCF" Guid="*">
<File Id="fil2D304D0395599AAAAAF975A2DBFD530F" KeyPath="yes" Source="$(var.GuardianPath)\C24.Guardian.pdb" />
</Component>
<Component Id="cmpFB799FA015274DDBE2C337C60667D2C5" Guid="*">
<File Id="filB9C39B394CAD03F5A1BC3262C61EDDEB" KeyPath="yes" Source="$(var.GuardianPath)\C24.Guardian.vshost.exe" />
</Component>
<Component Id="cmp28C29865AE85B067BCEEBD70EFDB19D5" Guid="*">
<File Id="fil0A756B711769AAD657F306B3A6EA7134" KeyPath="yes" Source="$(var.GuardianPath)\C24.Guardian.vshost.exe.config" />
</Component>
<Component Id="cmp92A715A4BD4B580A6E70362230170428" Guid="*">
<File Id="filBD9D504F303A6EEC9E340E3872BBB0AE" KeyPath="yes" Source="$(var.GuardianPath)\C24.Guardian.vshost.exe.manifest" />
</Component>
<Component Id="cmp8AB6A241FA2D13F296CBD946C9711579" Guid="*">
<File Id="fil8EF8CC607CB82B32F84FC9EC2F1636B9" KeyPath="yes" Source="$(var.GuardianPath)\com.Contact24.Tools.dll" />
</Component>
<Component Id="cmpC0DBB85C89E8AEA9BAC6E32B85913A2C" Guid="*">
<File Id="fil917CD649C5C318C6717D8EA9FFDF911A" KeyPath="yes" Source="$(var.GuardianPath)\com.Contact24.Tools.pdb" />
</Component>
<Component Id="cmp8AFB0FC7CCF571B61196D9166DEEBA24" Guid="*">
<File Id="fil32C12DF0163D5BAD7D0495F2CA2C8DA1" KeyPath="yes" Source="$(var.GuardianPath)\ICSharpCode.SharpZipLib.dll" />
</Component>
<Component Id="cmpF5DE5EB2B4C6E33F0C32CFF5F464432C" Guid="*">
<File Id="fil3C8C6F29095A04034E72FBB187F8B841" KeyPath="yes" Source="$(var.GuardianPath)\log4net.dll" />
</Component>
<Component Id="cmp27A7791E229DDDBC065069B26138FC2F" Guid="*">
<File Id="fil8DED592D9F63E708FEF848D2980A5186" KeyPath="yes" Source="$(var.GuardianPath)\log4net.xml" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="GuardianGroup">
<ComponentRef Id="cmp70BEDA00F3161F3FB5E847EB1136B1D5" />
<ComponentRef Id="cmp2EE8126A193FA022ED35FAD8F182E65A" />
<ComponentRef Id="cmp0CC91B457FBC44F978A2AD6B24043DCF" />
<ComponentRef Id="cmpFB799FA015274DDBE2C337C60667D2C5" />
<ComponentRef Id="cmp28C29865AE85B067BCEEBD70EFDB19D5" />
<ComponentRef Id="cmp92A715A4BD4B580A6E70362230170428" />
<ComponentRef Id="cmp8AB6A241FA2D13F296CBD946C9711579" />
<ComponentRef Id="cmpC0DBB85C89E8AEA9BAC6E32B85913A2C" />
<ComponentRef Id="cmp8AFB0FC7CCF571B61196D9166DEEBA24" />
<ComponentRef Id="cmpF5DE5EB2B4C6E33F0C32CFF5F464432C" />
<ComponentRef Id="cmp27A7791E229DDDBC065069B26138FC2F" />
</ComponentGroup>
</Fragment>
</Wix>
Sarà buono per ottenere qualcosa come il seguente codice generato automaticamente:
<ComponentRef Id="cmp70BEDA00F3161F3FB5E847EB1136B1D5">
<ServiceInstall
Id="ServiceAdminGuardianInstaller"
Type="ownProcess"
Vital="yes"
Name="C24.Guardian"
DisplayName="C24.Guardian"
Description="Служба контроля работы сервера администрирования"
Start="auto"
Account="[SERVICEACCOUNT]"
Password="[SERVICEPASSWORD]"
ErrorControl="ignore"
Interactive="no">
<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="StopGuardianService" Name="C24.Guardian" Stop="both" Wait="yes" Remove="uninstall" />
</ComponentRef>
Soluzione pulita! Sfortunatamente [le variabili non sono consentite] (http://stackoverflow.com/a/8839952/1811525) nell'espressione di corrispondenza, che sarebbe utile per far corrispondere il nome dell'eseguibile completo senza codificarlo nella definizione di trasformazione. :-( – CodeFox
Preferisco la soluzione di sttaq perché è molto utile se stai trasformando il numero di file wxs, passando i parametri. –