2012-12-20 245 views
3

我想维克斯3.6,这是它的外观现在:从WIX安装程序更新app.config?

<?xml version="1.0" encoding="UTF-8"?> 

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="myappINSTALLDIR" Name="myapp5Service"> 
     <Component Id="SampleServiceComponent" DiskId="1" Guid="6f51c0f3-776c-4aec-a200-1f199352c6c3" Win64="yes"> 
      <File Id="myapp5.WindowsService.exe" Name="myapp5.WindowsService.exe" Source="$(var.myapp.WindowsService.TargetDir)\myapp5.WindowsService.exe" KeyPath='yes'/> 
      ... 

      <ServiceInstall Id="InstallmyappService" DisplayName="myappService" Name="myapp5.WindowsService.exe" Description="myapp 5 Service - För effektivare och enklare operationsplanering" Account="LocalSystem" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes" /> 
      <ServiceControl Id="ControlmyappService" Name="myapp5.WindowsService.exe" Start="install" Stop="both" Remove="uninstall" Wait="yes" /> 
     </Component> 
    </Directory> 
</Directory> 


<WixVariable Id="WixUIBannerBmp" Value="$(var.ProjectDir)\Image\myappTopBanner.bmp" /> 
<WixVariable Id="WixUIDialogBmp" Value="$(var.ProjectDir)\Image\myappDialogBackground.bmp" /> 

<Property Id="WIXUI_INSTALLDIR" Value="myappINSTALLDIR" /> 
<UIRef Id="WixUI_InstallDir" /> 

<Feature Id="ProductFeature" Title="Wix_myapp.WindowsService" Level="1"> 
    <ComponentRef Id="SampleServiceComponent" /> 
</Feature> 
<Media Id="1" Cabinet="SampleServiceComponent.cab" EmbedCab="yes" /> 
</Product> 

现在我需要一个对话框添加到维克斯设置,其中一个appSetting并将一个baseadress(WCF)设置为app.config。这大部分在安装之前完成,因为它将决定Wix正在安装的Windows服务的名称。

而且考试会很棒!

编辑1:

<WixVariable Id="WixUIBannerBmp" Value="$(var.ProjectDir)\Image\myappTopBanner.bmp" /> 
<WixVariable Id="WixUIDialogBmp" Value="$(var.ProjectDir)\Image\myappDialogBackground.bmp" /> 

<Property Id="SERVICEADDRESS" Value="http://serviceaddress"/> 
<Property Id="WIXUI_INSTALLDIR" Value="myappINSTALLDIR" /> 
<UIRef Id="WixUI_InstallDir" /> 

<util:XmlFile Id="UpdateBaseAddress" 
    Action="setValue" 
    File="$(var.myapp.WindowsService.TargetDir)\myapp5.WindowsService.exe.config" 
    SelectionLanguage="XPath" 
    Permanent="yes" 
    ElementPath="/configuration/applicationSettings/ServiceName" 
    Name="baseAddress" Value="[SERVICEADDRESS]" /> 

<Feature Id="ProductFeature" Title="Wix_myapp.WindowsService" Level="1"> 
    <ComponentRef Id="SampleServiceComponent" /> 
</Feature> 
<Media Id="1" Cabinet="SampleServiceComponent.cab" EmbedCab="yes" /> 
</Product> 

回答

8

你可以在参考WixUtilExtension.dll到安装项目中添加,然后使用XMLFILE更新就像在app.config:

<Property Id="SERVICEADDRESS" Value="http://serviceaddress"/> 

<util:XmlFile Id="UpdateBaseAddress" 
    Action="setValue" 
    File="[DirApplication]$(var.app.config)" 
    SelectionLanguage="XPath" 
    Permanent="yes" 
    ElementPath="/configuration/applicationSettings/...." 
    Name="baseAddress" Value="[SERVICEADDRESS]" /> 

请注意,您需要设置.config文件的目录和名称(您可以使用$(var。ProjectName .TargetFile名称).config其中应该自动为你工作

+0

谢谢!请参阅编辑1.我更新了我的项目,但出现以下异常:产品元素包含意外的子元素。另请注意,在安装服务之前用户将此信息设置为配置文件是非常重要的(它决定安装的Windows服务的名称)。 – Banshee

+4

@SnowJim,根据文档['XmlFile'](http://wix.sourceforge.net/manual-wix3/util_xsd_xmlfile.htm)必须驻留在'Component'元素中。 – Dialecticus

+4

请注意,要使用Daniel的答案,您需要通过向您的根“”元素添加'xmlns:util =“http://schemas.microsoft.com/wix/UtilExtension”'来定义'util'。 –