Wix Installer - "此安装所需的DLL完成"错误

时间:2015-07-01 08:15:13

标签: wix wix3.5

当我运行安装程序时,我收到此错误: 此Windows Installer程序包存在问题。无法运行此安装所需的DLL。任何线索?

代码段:

    <?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="GoGo" UpgradeCode="9bfe9221-2d7d-46ee-b483-88f00e14b4b3">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
      <ComponentGroupRef Id="ProductComponents"/>
    </Feature>

    <!--<Binary Id="WixCA" SourceFile="WixCA.dll" />-->

    <Property Id="QtExecDeferredExample" Value="InstallManager.exe"/>
    <CustomAction Id="QtExecDeferredExample" BinaryKey="WixCA" DllEntry="WixQuietExec"
                Execute="immediate" Return="check" Impersonate="no"/>

    <InstallExecuteSequence>
      <Custom Action="QtExecDeferredExample" Before="InstallFinalize">NOT Installed</Custom>
    </InstallExecuteSequence>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="SetupProject1" >
          <Component Id='MainExecutable'>
            <File Id='InstallManagerEXE'
                  Name='InstallManager.exe'
                  DiskId='1'
                  Source='InstallManager.exe'
                  KeyPath='yes'/>
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <ComponentRef Id='MainExecutable' />
    </ComponentGroup>
  </Fragment>


</Wix>

4 个答案:

答案 0 :(得分:1)

你的问题有两个答案。

第一个答案:通用DLL

设置自定义操作时,会有一个属性DllEntry="WixQuietExec"。您需要使用以下代码将DLL包含在包中:

<Binary Id="WixCA" SourceFile="WixQuietExec.dll" />

此标记应在Product

中创建

所以你的代码就像这样:

...
<Binary Id="WixCA" SourceFile="WixQuietExec.dll" />
<CustomAction Id="QtExecDeferredExample" BinaryKey="WixCA" DllEntry="WixQuietExec"
              Execute="deferred" Return="check" Impersonate="no" />
...

请勿忘记匹配CustomAction[BinaryKey]Binary[Id]

第二个答案:WixUtilExtension

特别是对于 QtExec 等标准自定义操作,您只需要包含对扩展程序的引用。

  1. 在“解决方案资源管理器”中,展开项目中的“参考”
  2. 右键单击它并选择添加参考
  3. 浏览安装WiX Toolset的文件夹。然后选择bin文件夹。就我而言,完整路径为C:\Program Files (x86)\WiX Toolset v3.8\bin
  4. 选择WixUtilExtension.dll并按添加,然后按确定
  5. 更改Wix标记添加xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"。例如,您的代码为:

    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
         xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    

答案 1 :(得分:1)

尝试将DllEntryWixQuietExec更改为CAQuietExec,并使用QtExecCmdLine

请参阅https://www.firegiant.com/wix/tutorial/standard-libraries/silence-please/

答案 2 :(得分:1)

当我从使用CAQuietExec扩展转换为WixQuietExec时,我遇到了同样的问题(错误1157)。我在发生错误时使用了Wix Toolset 3.9。

我解决了安装Wix Toolset 3.10.1(现在是最后一个稳定版)的问题,WixQuietExec扩展按预期工作。

答案 3 :(得分:0)

对于使用C#开发自定义操作时遇到此问题的任何人,我建议确保

  1. BinaryKey是指生成的* .CA.dll,而不是 实际的dll文件。
  2. 确保所调用的方法已修饰 具有[CustomAction]属性。