gpt4 book ai didi

dynamic - 将构建参数传递给 .wxs 文件以动态构建 wix 安装程序

转载 作者:行者123 更新时间:2023-12-04 00:40:51 24 4
gpt4 key购买 nike

我是一名学生开发人员,我为我现在工作的公司构建了几个安装程序。所以我对 WIX 相当熟悉。
我们最近决定使用一个构建服务器来自动构建我们的解决方案。它构建调试和发布,以及混淆(和非混淆)项目。
你真的不需要理解这些。您只需要了解我有相同的 Wix 项目动态构建不同的 MSI。
因此,我们构建它们的方式是使用几个参数调用 MSBuild.exe。 wix 项目依赖的参数。
所以假设我们进入命令提示符并写

C:\>\windows\Microsoft.NET\Framework\v3.5\MSBuild.exe MyApp.Install\MyApp.Install.wixproj /p:Configuration=Release /p:SpecialPath=Obfuscated /t:Build
这个想法是 wix 看到“SpecialPath”参数被分配了“Obfuscated”;并在安装程序中将其源路径指向 ..\myApp\bin\$(var.SpecialPath)\myApp.exe转换为 ..\myApp\bin\Obfuscated\myApp.exe建成时。
问题
您如何创建这些自定义构建参数并将它们传递给我的 .wxs 文件。到目前为止,使用此设置, $(var.SpecialPath)未定义和构建 CrashSplosions。
出于明显的法律原因,我不得不删除 90% 的 project.wxs 文件并重命名一些内容,但出于所有意图和目的,这就是我所拥有的。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="myApp" Language="1033" Version="$(var.Version)" Manufacturer="myApp" UpgradeCode="$(var.UpgradeCode)">
<Package Id="*" InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media.cab" EmbedCab="yes" />

<Directory Id="TARGETDIR" Name="SourceDir" >
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="myApp">

<Component Id="myAppEXE" Guid="FD5EBC02-MY29-GUID-ACCA-61324C5F1B68">
<RegistryKey Root="HKLM" Key="Software\MyApp">
<RegistryValue Value="0" Type="string" KeyPath="yes"/>
</RegistryKey>
<File Id="MYAPPEXE" Name='myApp.exe' Source="..\myApp\bin\$(var.SpecialPath)\myApp.exe" />
</Component>

<Component Id="EngineDLL" Guid="*">
<File Id="ENGINEDLL" Name='Engine.dll' Source="..\myApp\bin\$(var.Configuration)\Engine.dll" />
</Component>
<Component Id="CommonDLL" Guid="*">
<File Id="COMMONDLL" Name='Common.dll' Source="..\myApp\bin\$(var.Configuration)\Common.dll" />
</Component>

</Directory>
</Directory>
</Directory>

<Feature Id="ProductFeature" Title="myApp" Description='All' Display='expand' Level="1" ConfigurableDirectory='INSTALLLOCATION'>
<ComponentRef Id="myAppEXE" />
<ComponentRef Id="EngineDLL" />
<ComponentRef Id="CommonDLL" />
</Feature>
</Product>
</Wix>

最佳答案

正如已经回答的那样,您需要将变量传递给 WiX。我们使用 Nant 而不是 MSBuild,但概念保持不变。

这是一个 Nant 示例,将六个变量传递给蜡烛(这不是最干净的示例,但从我参与的项目中逐字提取)

<candle   out="${dir.obj}\"
rebuild="true"
extensions="WixUIExtension;WixNetFxExtension">
<defines>
<define name="ProcessorArchitecture" value="${release.platform}" />
<define name="SourceDir" value="${dir.source}" />
<define name="version" value="${version}" />
<define name="releasetype" value="${release.type}" />
<define name="Language" value="${language}" />
<define name="product" value="${string.product}" />
<define name="productedition" value="${release.productedition}" />
</defines>

<sources>
<include name="*.wxs" />
<include name="..\Common\*.wxs" />
</sources>
</candle>

<!-- Define fallback culture for non-US -->
<property name="cultures" value="${language}" />
<property name="cultures" value="${language};en-US" unless="${language == 'en-US'}" />

<light
out="${dir.build}\setup_${release.platform}_${release.compressionlevel}.msi"
extensions="WixUIExtension;WixNetFxExtension;WixUtilExtension"
cultures="${cultures}"
rebuild="true"
suppressices="ICE03;ICE82"
suppresspdb="true" >


<arg line="-loc &quot;setup-${language}.wxl&quot;" />
<arg line="-sw1101" />

<arg line="-b ${dir.resources}" />
<arg line="-b ${dir.resources.common}" />
<arg line="-b ${dir.resources.common}\Microsoft" />
<arg line="-b ${dir.source}" />
<arg line="-dcl:${release.compressionlevel}" />
<arg line="-dWixUILicenseRtf=EULA_${language}.rtf" />
<sources>
<include name="${dir.obj}\*.wixobj" />
</sources>
</light>

关于dynamic - 将构建参数传递给 .wxs 文件以动态构建 wix 安装程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com