如何在WiX中使用light.exe在命令行中引用变量

加雷特·贾克斯

我已经阅读了一些参考文献,这些参考文献似乎暗示了在命令行中引用bind或WiX变量的能力(这是最明显的)这使我能够将程序集信息添加到生成的MSI的名称中。例如,

light.exe ... -out Installer.!(bind.FileVersion.myExe).msi ...
light.exe ... -out Installer.!(wix.BlahInfo).msi ...

肯定有一些验证正在进行。如果WXS文件和light.exe命令中的引用之间的WixVariable ID名称不同,则会收到错误消息:

light.exe : error LGHT0197 : The Windows Installer XML variable !(wix.BlahInfo1) is unknown

如果我确定它们匹配,则错误消失:

<WixVariable Id="BlahInfo" Value='!(bind.FileVersion.myExe)'/>
light.exe ... -out Installer.!(wix.BlahInfo).msi ...

但是,无论我如何尝试,生成的MSI文件都不会执行运行时变量替换。相反,它只是将!(...)添加到文件名。例如,我的上一个版本生成了一个具有以下名称的文件:

Installer.!(wix.BlahInfo).msi

这是可以做的事情还是我误解了文档?谢谢。

加雷特·贾克斯

因此,我得出了与鲍勃相同的结论。这是不可接受的,因为它在构建中引入了太多的可变性,因此我以不同的方式解决了它。我知道在命令行运行的可执行文件可以在运行时引用Windows环境变量。所以我要做的就是设置一个环境变量并引用它,瞧:

light.exe ... -out Installer.%BLAH_VERSION%.msi

为了实现这一目标,需要完成很多工作。首先,我的版本号来自Visual Studio项目的程序集信息。我要做的第一件事是使其动态化,以便为每个构建都创建一个新的。将最后两个数字更改为*可以做到:

[assembly: AssemblyVersion("6.4.*")]

接下来要做的是将该数字外部化,以便可以在其他地方使用。将这个节添加到csproj的末尾可以做到这一点:

<Target Name="PostBuildMacros">
  <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
    <Output TaskParameter="Assemblies" ItemName="Targets" />
  </GetAssemblyIdentity>
  <ItemGroup>
    <VersionNumber Include="@(Targets->'%(Version)')"/>
  </ItemGroup>
</Target>
<PropertyGroup>
  <PostBuildEventDependsOn>
    $(PostBuildEventDependsOn);
    PostBuildMacros;
  </PostBuildEventDependsOn>    
  <PostBuildEvent>setx BLAH_VERSION @(VersionNumber)</PostBuildEvent>
</PropertyGroup>

感谢这篇stackoverflow帖子的帮助。

当然要引用它,我将需要找到一种方法来获取已经打开的命令提示符,以将其引用更新为环境变量。这被证明是最困难的,但是这个stackoverflow帖子可以挽救了。

因此,现在我已使用Windows批处理脚本将它们捆绑在一起。本质上,我会生成EXE并进行测试,确保它运行良好,然后运行批处理脚本,并且我有一个以为我生成的程序集信息版本命名的MSI文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在MySQL的命令行中显示变量的值?

来自分类Dev

如何在Wix中添加命令行参数

来自分类Dev

如何在bash中使用变量指定命令行参数

来自分类Dev

如何在WIX中使用Candle定义项目变量?

来自分类Dev

如何通过量角器中的命令行设置IEDriverServer.exe

来自分类Dev

如何删除命令行的exe部分

来自分类Dev

如何删除命令行的exe部分

来自分类Dev

如何在Verilog中使用环境变量或命令行设置宏的值?

来自分类Dev

如何在Gradle 6.1.1中使用Gradle Kotlin DSL运行命令行命令?

来自分类Dev

如何在AutoExec宏中获取WinWord.exe的命令行参数?

来自分类Dev

如何在cmd中的setx命令的参数中使用全局变量(命令行)

来自分类Dev

引用字符串以在命令行中使用

来自分类Dev

如何仅在命令行中使用vimscript中的sleep?

来自分类Dev

如何使用动态命令行参数托管exe

来自分类Dev

如何在Windows中使用命令行修改环境变量

来自分类Dev

在Windows cmd.exe的同一命令行中设置和使用变量

来自分类Dev

如何在命令行中使用条形将值分配给多个变量

来自分类Dev

如何在Zsh的命令行中展开所有变量?

来自分类Dev

使用PATH创建命令行变量

来自分类Dev

将路径存储在变量中,并在Windows Dos命令行中使用

来自分类Dev

如何通过量角器中的命令行设置IEDriverServer.exe

来自分类Dev

如何在命令行中取消设置变量?

来自分类Dev

可以在批处理文件中使用并加入长路径变量来调用带有较长变量作为命令行参数的EXE吗?如何?

来自分类Dev

如何在命令行上设置环境变量并使它出现在命令中?

来自分类Dev

如何在Verilog中使用环境变量或命令行设置宏的值?

来自分类Dev

Windows命令行:如何在调用中设置全局变量?

来自分类Dev

WiX:了解如何在命令行中使用自定义变量

来自分类Dev

在Unix命令行中使用变量

来自分类Dev

在 ruby 中运行命令行命令,使用 ruby 变量

Related 相关文章

  1. 1

    如何在MySQL的命令行中显示变量的值?

  2. 2

    如何在Wix中添加命令行参数

  3. 3

    如何在bash中使用变量指定命令行参数

  4. 4

    如何在WIX中使用Candle定义项目变量?

  5. 5

    如何通过量角器中的命令行设置IEDriverServer.exe

  6. 6

    如何删除命令行的exe部分

  7. 7

    如何删除命令行的exe部分

  8. 8

    如何在Verilog中使用环境变量或命令行设置宏的值?

  9. 9

    如何在Gradle 6.1.1中使用Gradle Kotlin DSL运行命令行命令?

  10. 10

    如何在AutoExec宏中获取WinWord.exe的命令行参数?

  11. 11

    如何在cmd中的setx命令的参数中使用全局变量(命令行)

  12. 12

    引用字符串以在命令行中使用

  13. 13

    如何仅在命令行中使用vimscript中的sleep?

  14. 14

    如何使用动态命令行参数托管exe

  15. 15

    如何在Windows中使用命令行修改环境变量

  16. 16

    在Windows cmd.exe的同一命令行中设置和使用变量

  17. 17

    如何在命令行中使用条形将值分配给多个变量

  18. 18

    如何在Zsh的命令行中展开所有变量?

  19. 19

    使用PATH创建命令行变量

  20. 20

    将路径存储在变量中,并在Windows Dos命令行中使用

  21. 21

    如何通过量角器中的命令行设置IEDriverServer.exe

  22. 22

    如何在命令行中取消设置变量?

  23. 23

    可以在批处理文件中使用并加入长路径变量来调用带有较长变量作为命令行参数的EXE吗?如何?

  24. 24

    如何在命令行上设置环境变量并使它出现在命令中?

  25. 25

    如何在Verilog中使用环境变量或命令行设置宏的值?

  26. 26

    Windows命令行:如何在调用中设置全局变量?

  27. 27

    WiX:了解如何在命令行中使用自定义变量

  28. 28

    在Unix命令行中使用变量

  29. 29

    在 ruby 中运行命令行命令,使用 ruby 变量

热门标签

归档