首页 > 解决方案 > Wix Bootstrap 防止使用临时目录

问题描述

我已经为 Wix v3 项目类型构建了带有 Bootstrapper 项目的“HelloWord”安装程序。

我的 bundle.wxs 是

    <?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">

  <Bundle Name="Bundle_name"
          Version="1.0.0.0"
          Manufacturer="Producter"
          UpgradeCode="C82A383C-751A-43B8-90BF-A250F7BC2863"
          IconSourceFile="..\WpfForms\Assets\my_lovely.ico"  >

    <BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
      <Payload SourceFile="..\WpfForms\BootstrapperCore.config"/>
      <Payload SourceFile="..\WpfForms\bin\Debug\WpfForms.dll"/>
      <Payload SourceFile="..\WpfForms\bin\Debug\GalaSoft.MvvmLight.dll"/>
      <!--<Payload SourceFile="..\WpfForms\bin\Debug\Microsoft.Practices.ServiceLocation.dll"/>
      <Payload SourceFile="..\WpfForms\bin\Debug\Microsoft.WindowsAPICodePack.dll"/>
      <Payload SourceFile="..\WpfForms\bin\Debug\Microsoft.WindowsAPICodePack.Shell.dll"/>-->

      <Payload SourceFile="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.ServiceProcess.dll"/>
      <Payload SourceFile="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Configuration.Install.dll"/>
      <Payload SourceFile="C:\Program Files (x86)\WiX Toolset v3.11\SDK\Microsoft.Deployment.WindowsInstaller.dll"/>
    </BootstrapperApplicationRef>

    <Chain>
      <PackageGroupRef Id='Netfx4Full'/>
      <MsiPackage SourceFile="..\WixSetupProject\bin\Debug\WixSetupProject.msi" Id="InstallationPackageId" Cache="yes" Visible="no"/>
    </Chain>
  </Bundle>

  <Fragment>
    <WixVariable Id="WixMbaPrereqPackageId" Value="Netfx4Full" />
    <WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" />

    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" />
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" />

    <PackageGroup Id="Netfx4Full">
      <ExePackage Id="Netfx4Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" Name="DotNet_4"
                  SourceFile="../WixBootstrapper/DotNet/NDP462-KB3151800-x86-x64-AllOS-ENU.exe"
                  DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"
                  DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" />
    </PackageGroup>
  </Fragment>
</Wix>

我的问题是工作站的防病毒软件配置为阻止temp目录中的任何活动,并且构建的 installer.exe 将自身复制为“C:\Windows\Temp{74EA5B2A-DA46-4B3F-A8E9-4FCEC4B4523C}.cr\WixBootstrapper.exe "并默认运行。所以它被杀毒软件锁定,所以安装在开始时就结束了。

有人知道我如何防止 WiX 组件在临时目录中创建缓存或其他内容,并设置为从当前文件夹运行任何嵌套的可执行文件及其自身,而不是从temp?

标签: wixwindows-installer

解决方案


在检查了 Windows 的组策略设置后,这被证明是一个防病毒阻止问题。


组策略?: 日志是否包含以下内容:

Error 0x800704ec: Failed to launch clean room process: "C:\WINDOWS\Temp\{AB10C981-0D7D-4AA6-857F-CC37696DB4BE}\.cr\Bundle.exe" -burn.clean.room="C:\Test\Bundle.exe" -burn.filehandle.attached=652 -burn.filehandle.self=656 -log "C:\Test\bundle.log"
Error 0x800704ec: Failed to run untrusted mode.

还是说别的?有可能导致类似问题的组策略。请参阅 WiX 问题 5856

防病毒宽限期?:如果您是管理员,我认为应该有可能从您的防病毒软件中获得临时宽限期。所以你可以执行你的测试。如果不成功,我会先给您自己的支持台打个电话,然后再访问卡巴斯基用户论坛。也许您有 Kaspersky 支持协议并提供优先支持?

误报:我还坚持将您的二进制文件上传到virustotal.com以测试误报。无论如何你都应该这样做。Bogdan Mitrache防病毒白名单痛苦

误报实际上有时比实际的恶意软件更糟糕(只要恶意软件没有破坏性),因为您不能只告诉用户重建他们的机器。相反,您实际上必须在一般意义上为他们解决问题。不仅用户有问题要解决,您也有一个作为供应商的问题。您如何使用 60 多个反恶意软件套件将您的产品列入白名单?我认为您首先尝试virustotal.com(不附属) - 检查您是否真的有这样的问题。


推荐阅读