如果未添加WixVariables WixMbaPrereqPackageId
和WixMbaPrereqLicenseUrl
,则无法编译。
Windows Installer XML变量
!(wix.WixMbaPrereqPackageId)
未知 Windows Installer XML变量!(wix.WixMbaPrereqLicenseUrl)
未知。
如果添加了两个变量,即使我的测试计算机安装了.NET Framework 4.0,引导程序也会每次都安装.NET Framework 4.0。
如果目标计算机已经具有.NET框架,如何避免安装.NET Framework?
以下是我的示例代码。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name="TestBootstrapper" Version="1.0.0.0" Manufacturer="Microsoft" UpgradeCode="e8c02687-b5fe-4842-bcc4-286c2800b556">
<BootstrapperApplicationRef Id='ManagedBootstrapperApplicationHost'>
<Payload SourceFile='MyBA.dll' />
</BootstrapperApplicationRef>
<!--<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />-->
<Chain>
<PackageGroupRef
Id="Netfx4Full"/>
<MsiPackage Name="SetupProject1.msi" SourceFile="data\SetupProject1.msi" DownloadUrl="http://myserver/SetupProject1.msi" Compressed="no">
</MsiPackage>
<MsiPackage Name="SetupProject2.msi" SourceFile="data\SetupProject2.msi" DownloadUrl="http://myserver/SetupProject2.msi" Compressed="no">
</MsiPackage>
</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="no"
PerMachine="yes"
Permanent="yes"
Vital="yes"
SourceFile="dotNetFx40_Full_x86_x64.exe"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"
DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" />
</PackageGroup>
</Fragment>
</Wix>
答案 0 :(得分:5)
您缺少Burn启动自定义BA所需的一些配置。如果初始化和加载BA失败,则启动先决条件安装程序。在您的情况下.Net Framework。
您必须添加“BootstrapperCore.config”文件作为有效负载才能使自定义BA运行。 BoostrapperCore.config告诉刻录引擎如何初始化自定义BA。
您的BootstrapperApplicationRef应如下所示
<BootstrapperApplicationRef Id='ManagedBootstrapperApplicationHost'>
<Payload SourceFile='MyBA.dll' />
<Payload SourceFile='BootstrapperCore.config' />
</BootstrapperApplicationRef>
BootstrapperCore.config文件的内容:
<configuration>
<configSections>
<sectionGroup name="wix.bootstrapper"
type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore">
<section name="host"
type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" />
</sectionGroup>
</configSections>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
<wix.bootstrapper>
<host assemblyName="MyBA">
<supportedFramework version="v4\Full" />
<supportedFramework version="v4\Client" />
</host>
</wix.bootstrapper>
</configuration>
将没有扩展名的程序集名称写入属性“assemblyName”。
还要确保将以下条目添加到BA程序集的assemblyinfo.cs中,其中MyNamespace.MyBA是类的名称,包括从WiXBootstrapper.BootstrapperApplication派生的完整命名空间名称
[assembly: BootstrapperApplication(typeof(MyNamespace.MyBA))]
答案 1 :(得分:2)
WIX Bootstrapper默认启动Framework安装,当它无法加载MBA时。使用简单的消息框检查您的MBA是否已加载。
您可以在运行()功能中使用以下代码来确保这一点。
protected override void Run()
{
this.Engine.Log(LogLevel.Verbose, "Running the TestBA.");
MessageBox.Show("MBA is loaded");
this.Engine.Quit(0);
}
确保您已在程序集信息文件中包含MBA类名称。
[assembly: BootstrapperApplication(typeof(TestBA))]
检查%temp%位置中的Bootstrapper日志文件,找出错误的根本原因。
我引用了this示例来启动Bootstrapper应用程序。这可能对你有所帮助。
答案 2 :(得分:0)
Burn创建一个日志 - 它说什么?听起来你的DetectCondition是错误的。为什么不使用.NET的WiX软件包?他们有正确的搜索和条件。