运行Wix WPF引导程序时出现空白屏幕

时间:2014-12-04 18:21:37

标签: wpf xaml wix bootstrapper

我有一个用WPF编写的Wix Managed Bootstrapper应用程序。

经过一定的更改后,引导程序不再起作用:当我在没有Bootstrapper的情况下运行WPF项目时,它运行正常(UI至少显示)。但是当我运行Bootstrapper本身时,它会打开一个空的(黑色背景)窗口,它只是坐在那里,什么都不做。

突破性变化似乎正在将主视图MainView.xaml移动到View子文件夹中。当然即使进行此更改,WPF项目本身仍可正常运行,但只是如上所述,Bootstrapper已被破坏。

我做了一些搜索,我能找到的最近的信息是http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Visual-Styles-in-Wix-BA-td7584971.html,其中的建议包括:

1)使用pack://application:,,,,即所有资源的绝对路径:我试过这个,但它没有解决我的问题

2)将额外的文件添加为Payload元素:这似乎只适用于非嵌入式资源,所以它不适用于我

3)将Application.ResourceAssembly = typeof(MainWindow).Assembly;添加到Bootstrapper:我不知道这是做什么的,我不知道在哪里添加它所以我没有尝试过。

如何解决此问题?

其他信息:重大变化:我将我的MainView XAML文件从WPF应用程序的根目录移动到名为View的子文件夹。我将多个ResourceDictionary个XAML文件从/View/移到了/View/Dictionaries/。我使用绝对路径来访问这些移动的XAML文件,例如:

<ResourceDictionary Source="WindowStyle.xaml" />

已更改为

<ResourceDictionary Source="/View/Dictionaries/WindowStyle.xaml" />

请注意,我使用的绝对路径以斜杠开头,但不以pack://application:,,,开头。

图片资源:如果相关,我的所有图片都会放在Resources文件夹中,其属性为Build action = ResourceCopy to output directory = Do not copy。我使用了这样的图像:

<Image Source="/Resources/logo.png" VerticalAlignment="Center" Width="75" Height="25" />

2 个答案:

答案 0 :(得分:1)

Application.ResourceAssembly(ManagedBootstrapperApplicationHost是一个托管.NET和WPF程序集的非托管应用程序。)

您可以尽快调用它,即在BootstrapperApplication的无参数构造函数中,其中MainWindow是DLL中包含嵌入资源的类型。这允许您使用pack://application:,,,样式引用。

public class MyBA : BootstrapperApplication
{
    public MyBA()
    {
        if (Application.ResourceAssembly == null)
        {
            Application.ResourceAssembly = typeof(MainWindow).Assembly;
        }
    }
}

答案 1 :(得分:0)

在我的问题中,解决方案与建议1)相反。换句话说,我不得不在我的XAML中使用相对路径而不是绝对路径。 Wix BS必须移动东西,所以绝对路径不起作用,但是相对路径会起作用,因为移动的所有东西将一起移动并且仍然处于相同的相对位置。