【问题标题】:WiX Burn custom UIWiX 刻录自定义 UI
【发布时间】:2011-11-02 16:17:19
【问题描述】:

我正在尝试为 WiX 和 Burn 创建自定义 UI。我遵循了一些我找到的指南,到目前为止,我有一个项目具有以下内容,它继承自 BootstrapperApplication。

namespace MyBA
{
    public class TestBA : BootstrapperApplication
    {
        protected override void Run()
        {
            MessageBox.Show("My BA is running");
            this.Engine.Quit(0);
        }
    }
}

在 AssemblyInfo.cs 中:

[assembly: BootstrapperApplication(typeof(TestBA))]

然后在我的 Bootstrapper 项目中,我有以下内容。

<?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="MyApplication"
            Version="1.0.0"
            Manufacturer="Acme Ltd"
            UpgradeCode="F84A4058-FDF6-4218-BCB5-12C811DA3C99"
            Condition="NOT ((VersionNT = 600 AND ServicePackLevel >=2) OR (VersionNT >= 601))"
            IconSourceFile="$(var.MyApplicationInstallerRequiredFiles.ProjectDir)logo.ico"
            SplashScreenSourceFile="$(var.MyApplicationInstallerRequiredFiles.ProjectDir)Splashscreen.bmp"
            DisableRepair="no"
            DisableRemove="no"
            DisableModify="no">

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

        <WixVariable Id="WixStdbaLicenseRtf"
                     Value="$(var.MyApplicationInstallerRequiredFiles.ProjectDir)Licence.en-gb.rtf" />
        <WixVariable Id="WixStdbaLogo"
                     Value="$(var.MyApplicationInstallerRequiredFiles.ProjectDir)logoInstallSmall.bmp" />

        <BootstrapperApplicationRef Id='ManagedBootstrapperApplicationHost'>
            <Payload Name='BootstrapperCore.config'
                     SourceFile='$(var.MyApplicationInstallerRequiredFiles.ProjectDir)Bootstrapper\MyBA.BootstrapperCore.config' />
            <Payload SourceFile='$(var.MyApplicationInstallerRequiredFiles.ProjectDir)Bootstrapper\MyBA.dll' />
        </BootstrapperApplicationRef>

        <Chain>
            <PackageGroupRef Id="MyApplicationPackage" />
        </Chain>
    </Bundle>
</Wix>

我已经添加了 MyBA.BootstrapperCore.config

<?xml version="1.0" encoding="utf-8" ?>
<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>

但是,每当我为引导程序运行 Setup.exe 时,我都会短暂地出现闪屏,但没有别的。如果我在日志中查看 %TEMP%,则会出现以下内容

[0A00:0424][2011-11-02T15:52:08]: Burn v3.6.2221.0, path: C:\MyApplication\dev\source\Bootstrapper1\bin\Debug\Setup.exe, cmdline: ''
[0A00:0424][2011-11-02T15:52:08]: Setting string variable 'WixBundleName' to value 'MyApplication'
[0A00:0424][2011-11-02T15:52:08]: Setting string variable 'WixBundleLog' to value 'C:\Users\AppData\Local\Temp\MyApplication_20111102155208.log'
[0A00:0424][2011-11-02T15:52:08]: Condition 'NOT ((VersionNT = 600 AND ServicePackLevel >=2) OR (VersionNT >= 601))' evaluates to true.
[0A00:0424][2011-11-02T15:52:08]: Setting string variable 'WixBundleOriginalSource' to value 'C:\MyApplication\dev\source\Bootstrapper1\bin\Debug\Setup.exe'
[0A00:0424][2011-11-02T15:52:08]: Loading managed bootstrapper application.
[0A00:0424][2011-11-02T15:52:08]: Error 0x80131040: Failed to create the managed bootstrapper application.
[0A00:0424][2011-11-02T15:52:08]: Error 0x80131040: Failed to create UX.
[0A00:0424][2011-11-02T15:52:08]: Error 0x80131040: Failed to load UX.
[0A00:0424][2011-11-02T15:52:08]: Error 0x80131040: Failed while running
[0A00:0424][2011-11-02T15:52:08]: Error 0x80131040: Failed to run per-user mode.

为什么会出现这种情况以及为什么会出现上述错误?

【问题讨论】:

    标签: wix bootstrapper wix3.6 burn


    【解决方案1】:

    如果你看一下 WixBA 的源代码,他们声明了一个全局 Threading.Dispatcher,然后在重写的 Run() 方法中,有以下行:

    Threading.Dispatcher.Run();
    

    我遇到了类似的问题,同样将 Threading.Dispatcher 添加到我的引导程序应用程序中修复了这些问题。

    另外,如果您的引导程序应用程序依赖于任何其他 dll,您需要将它们作为 &lt;Payload/&gt; 包含在您的 &lt;BootstrapperApplicationRef/&gt; 下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      相关资源
      最近更新 更多