1

在我的 Visual Studio 2017 解决方案中,我有一个 WiX 3 设置项目,该项目可以提取其他几个项目(库、可执行文件、资产、内容)的输出。在解决方案的目录结构下但没有作为项目添加到解决方案中,我有一个使用 webpack 编译一些浏览器扩展的项目。这个 webpack 项目输出到一个 artifacts 文件夹,其中包含每个浏览器的子目录。在每个子目录中都是编译后的扩展,文件名中包含版本号,例如:

  • 人工制品
    • 铬合金
      • myextension-0.1.0.0.zip
      • myextension-0.1.0.1.zip
      • myextension-0.1.0.2.zip

在编译时,最终我想将与版本号匹配的文件,即 myextension-\$(var.VERSION).zip 包含到 MSI 包中,以便在安装过程中将其放入应用程序文件夹中。即使我将版本号(即 myextension-0.1.0.2.zip)硬编码到组件中,我也会收到错误消息:

LGHT0001: The system cannot find the path specified. (Exception from HRESULT: 0x80070003)

我正在使用这样的定义获取目录:

<?define ChromeTargetDir=$(var.SolutionDir)Extensions\artifacts\chrome\?>

然后我的组件看起来像这样:

<Component Id="ChromeExt"
             Location="local"
             Guid="GUID_HERE">
    <CreateFolder/>
    <File Id="ChromeExtension"
          Name="myextension-0.1.0.2.zip"
          Source="$(var.ChromeTargetDir)myextension-0.1.0.2.zip"
          KeyPath="yes"/>
</Component>

当我查看由蜡烛创建的 wixobj 时,我看到完整的正确路径被替换为它驻留在我的系统上的文件:

<field>C:\Users\me\source\repos\mysolution\Extensions\artifacts\chrome\myextension-0.1.0.2.zip</field>

所以我的问题是,在我的 WiX 项目中包含“任意”文件的正确方法是什么?

4

1 回答 1

0

1) 解决方案与项目目录:我要尝试的第一件事是替换$(var.SolutionDir)$(var.ProjectDir)尝试重新编译。如果问题是其他问题,我会跟进。让我们先排除这一点。

2) 引号:我还在路径周围使用引号:

<?define ChromeTargetDir="C:\Sources\Packages\MyChromeExtension\Files\" ?> 

3) 项目变量:最后,您需要在项目中添加一个引用,以便项目引用和变量起作用: WiX:如何使用 SolutionDir 的相对路径


晦涩难懂:更晦涩的原因可能是缺少访问权限(构建过程和 light.exe 看不到文件 - 模拟运行?)。文件或文件夹损坏?(尝试更换)。以及任何其他可能对你不利的东西。锁定文件?

于 2018-09-19T22:16:27.980 回答