代码之家  ›  专栏  ›  技术社区  ›  Jeronymite

WiX 3.11.1—错误LGHT0103:系统找不到文件

  •  3
  • Jeronymite  · 技术社区  · 8 年前

    Windows 10 Pro 1703 64位版本上的WiX 3.11.1。未使用Visual Studio。使用简单的文本文件,如下所示。

    这是我发现的情况的一个测试案例。

    myapp。wxs是:

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
         xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
    
        <Product Id="*"
                 Name="MyApp"
                 Language="1033"
                 Version="1.0.0.0"
                 Manufacturer="Me"
                 UpgradeCode="PUT-GUID-HERE">
    
            <Package InstallerVersion="301"
                     Compressed="yes"
                     InstallScope="perMachine"
                     Manufacturer="Me"
                     Description="My App"
                     Keywords=".NET,Installer,MSI" />
    
            <MediaTemplate EmbedCab="yes" />
            <UIRef Id="WixUI_Minimal" />
            <UIRef Id="WixUI_ErrorProgressText" />
    
            <!-- ****************************************** -->
            <WixVariable Id="WixUIDialogBmp"
                         Value="[CMP_Refresh_file]" />
            <!-- ****************************************** -->
    
            <Feature Id="MyFeature"
                     Title="MyApp Feature"
                     Description="Installs MyApp"
                     Level="1">
            </Feature>
        </Product>
    
        <Fragment>
            <Directory Id="TARGETDIR" Name="SourceDir">
                <Directory Id="TestFolder" Name="TESTfolder" />
            </Directory>
            <Component Id="CMP_Refresh_file" Guid="*" Directory="TESTfolder">
                <File Id="FILE_RefreshPNG" Source= "Refresh.png" KeyPath="yes" />
            </Component>
        </Fragment>
    </Wix>
    

    myapp。bat是:

    "C:\Program Files (x86)\WiX Toolset v3.11\bin\candle.exe" myapp.wxs
    "C:\Program Files (x86)\WiX Toolset v3.11\bin\light.exe"  myapp.wixobj -ext WixUIExtension -ext WixUtilExtension
    @pause
    

    当我运行时。bat文件,它找不到CMP\u Refresh\u文件(错误LGHT0103:系统找不到该文件)。文件夹TESTfolder是其中包含的文件夹的直接子文件夹。wxs文件存在。

    替换完整文件路径可以解决此问题。但这不是我想要的,因为我将有大量的文件和文件夹。(当然,如果我将该文件放在与.wxs文件相同的文件夹中,它会找到它。)

    我怀疑这纯粹是由于我的无知造成的句法问题。在任何情况下,我都尝试过WixUIDialogBmp值的无休止的语法变化,但没有任何乐趣(除了全名)。

    帮助解决 非常 非常感谢。谢谢

    3 回复  |  直到 8 年前
        1
  •  0
  •   Isaiah4110    8 年前

    查看您的WiX代码,我可以看到您对MSI目标路径和源文件夹路径感到困惑。目录标记用于在运行MSI的计算机上创建一个文件夹(您要在其中部署应用程序)-它与打包文件的源文件夹无关。

    将文件路径替换为:

    <File Id="FILE_RefreshPNG" Source= "\TESTfolder\Refresh.png" KeyPath="yes"/>
    

    如您所见,文件->应参考WXS文件路径写入源属性路径。

    如果您计划部署刷新。png位于客户端计算机上的testfolder下面,然后您需要转到关闭 </Directory> 在您的 <File> 标签

        2
  •  0
  •   Ritmo2k    8 年前

    尝试 <WixVariable Id="WixUIDialogBmp" Value="[#CMP_Refresh_file]" /> 它引用安装路径。看见 Formatted Strings 了解更多信息。

        3
  •  0
  •   Joel Davies    4 年前

    在试图找出源文件解析的另一个问题时遇到此问题。 Isaiah4110's answer 具有误导性。这个 <Directory> 结构 可以 指定目标计算机上的两个目标 和 只要目录结构相同,就可以在何处找到源文件。你只要把你的 <Component> 元素,并指定 Name 属性而不是 Source .

    在这种情况下,应采取以下措施:

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="TestFolder" Name="TESTfolder">
            <Component Id="CMP_Refresh_file" Guid="*">
                <File Id="FILE_RefreshPNG" Name="Refresh.png" KeyPath="yes" />
            </Component>
        </Directory>
    </Directory>
    

    这是因为 来源 的 <File> 默认为 <组件(>); 的父级 <目录(>); 元素(如果有)加上 名称 . 请参见: File element reference 和 How to specify source files . 不幸的是,在放置 <组件(>); 在 <目录(>); 结构如问题中的示例所示。