使用WiX更新清单文件

时间:2012-08-30 11:27:11

标签: wix wix3.5 wix-extension

我有一个应用程序的清单文件,如下所示:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity name="xxx.exe" version="1.1.0.0" type="win32" processorArchitecture="x86" />
  <file name="xxxxxxxx.ocx" hashalg="SHA1">
    <comClass clsid="{4xxxxxxx76-D693-4156-93BA-B938A56F15D3}" description="" threadingModel="apartment" />
    <typelib tlbid="{8xxxxxx-3A75-4708-993D-6E0CD9564072}" version="1.0" helpdir="" flags="control,hasdiskimage" />
  </file>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity name="Assembly numero uno" version="1.1.0.0" type="win32" publicKeyToken="7XXXXXXXXXXXD" />
    </dependentAssembly>
  </dependency>
</assembly>

我想在<dependency>标记后面添加一个新的</dependency>部分。新<dependency>应如下所示:

<dependency>
  <dependentAssembly>
    <assemblyIdentity name="Assembly number two" version="1.1.0.0" type="win32" publicKeyToken="7XXXXXXXXXXXD" />
  </dependentAssembly>
</dependency>

如何使用Wix实现这一目标?

2 个答案:

答案 0 :(得分:2)

首先,考虑在构建时修改清单。如果可能的话,那就更好了 - 总是选择构建时复杂度而不是安装时复杂度。

仅在<dependency>元素内容取决于用户输入或目标系统状态的情况下,将其保留为安装时间可能是有意义的。在这种情况下,您应该使用其中一个WiX选项来修改XML,XmlFile @ OleksandrPshenychnyy提到,或XmlConfig。我经常使用后者,因为它看起来更灵活。

如果您决定在安装时修改清单,您仍然可以让您的生活更轻松。在构建时将XML模式添加到清单,并且仅在安装时修改依赖于用户输入或系统状态的部分。假设它是assemblyIdentity/version属性。然后,WiX片段可能如下所示:

<util:XmlConfig Id="VersionChange" ElementPath="assembly/dependency/dependentAssembly/assemblyIdentity[\[]@name='Assembly number two'[\]]" File="$(var.Manifest)" Name="version" Action="create" Node="value" On="install" PreserveModifiedDate="yes" Value="1.1.0.0" />

注意方括号转义技术。

答案 1 :(得分:1)

您可以将WisUtilExtention库与XmlFile元素一起使用,以使用XML文件执行某些操作。有关详细信息,请访问this link