wix - 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
?
解决方案
在检查了 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(不附属) - 检查您是否真的有这样的问题。
推荐阅读
- python - 如何将浮点数列表的 2d np.array 转换为浮点数的 2d np.array,将列表值堆叠到行
- animation - 使用快速滚动,使用 scrollmagic 拍摄的 tentmax 动画无法正常工作
- firebase - 使用 BLoC 进行 Flutter Firebase 电话身份验证
- swiftui - 如何在没有 navigationView 或 popover 的情况下切换视图?
- python - Python:将列表添加到字典中
- javascript - 如何选择在 Typescript 接口中嵌入一个或多个接口?
- arrays - 来自 'server'.js 的数组数组在 'view'.ejs 中以字符串形式返回
- node.js - 使用带有 RDS 的 Sequelize 获取 TimeoutError:ResourceRequest 超时
- powerbi - DAX - 试图编写一个需要不存在关系的度量
- reactjs - 图像路径在生产中的 ReactJs 中断?