Wix安装程序 - "DLL required for this install to complete" 错误

4
当我运行安装程序时,出现以下错误提示: 这个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>

也许你应该通过以下命令安装并记录日志,以查看日志文件log.txt是否提供了任何关于错误出现原因的线索:msiexec /i SetupProject1.msi /lvoicewarmupx log.txt - mcy
日志显示:错误 1723。此 Windows Installer 包存在问题。无法运行完成此安装所需的 DLL。请联系您的支持人员或软件包供应商。操作 QtExecDeferredExample,入口点:WixQuietExec,库:C:\Windows\Installer\MSIF136.tmp - Ayan
尝试将其作为“立即”操作而不是在“installFinalize”之后“延迟”执行。 - mcy
这个错误是在一台机器上出现还是在你尝试安装的每台电脑上都出现? - mcy
在多台机器上 - Ayan
4个回答

3

你的问题有两个答案。

第一个答案:通用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并单击添加,然后单击确定

更改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">

2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ayan
我扩展了答案以涵盖您的特定情况。 - Marlos
4
即使按照上述步骤进行操作[请参见更新的代码],仍然出现相同的错误:错误1723。这个Windows安装程序包存在问题。 完成此安装所需的DLL无法运行。 请联系您的支持人员或软件包供应商。操作QtExecDeferredExample,输入:WixQuietExec,库:C:\ Windows \ Installer \ MSI3936.tmp。 - Ayan

1

如果您在使用C#开发自定义操作时遇到此问题,我建议确保:

  1. BinaryKey是指向生成的*.CA.dll文件而不是实际的dll文件。
  2. 被调用的方法要装饰有[CustomAction]属性。

还要确保重命名CA时不仅在wxs文件中进行。没有重命名C#方法让我浪费了一个小时的无功调查。我真的不知道我是怎么做到的,但我想其他人可能会这样做。 - Ian
使用 [CustomAction] 属性装饰方法在我的情况下非常有帮助,谢谢! - n0ne

1

1
当我从使用CAQuietExec扩展切换到WixQuietExec时,我遇到了相同的问题(错误1157)。当错误发生时,我使用的是Wix Toolset 3.9。
我通过安装Wix Toolset 3.10.1(现在是最新稳定版本)来解决这个问题,然后WixQuietExec扩展正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接