0

我有一个 WPF .Net 4.0 应用程序,它在 WinPE 4.0 下运行得很好,直到最近。我添加了如下所示的代码,它在 WinPE 4.0 下运行时破坏了应用程序。请注意,该应用程序在 Windows 7 x64 和 Windows 2012 下仍然可以正常运行。

[ValueConversion(typeof(string), typeof(bool))]
public class HeaderToImageConverter : IValueConverter
{
    public static HeaderToImageConverter Instance =
        new HeaderToImageConverter();

    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        if ((value as string).Contains("corp.com"))
        {
            Uri uri = new Uri
            ("pack://application:,,,/Images/DeployWiz_Network.png");
            BitmapImage source = new BitmapImage();
            source.BeginInit();
            source.UriSource = uri;
            source.DecodePixelHeight = 40;
            source.EndInit();
            return source;
        }
        else
        {
            Uri uri = new Uri
            ("pack://application:,,,/Images/ou2.png");
            BitmapImage source = new BitmapImage();
            source.BeginInit();
            source.UriSource = uri;
            source.DecodePixelHeight = 20;
            source.EndInit();
            return source;
        }
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        throw new NotSupportedException("Cannot convert back");
    }
}

此代码允许我根据树视图项的内容在树视图控件中使用不同的图像。

在 WinPE 下运行时,出现以下异常:

在此处输入图像描述

因此,我将丢失的 .DLL 与 .exe 放在同一个文件夹中,然后我得到了这个异常:

在此处输入图像描述

.dll 有什么奇怪的地方不能在 WinPE 中工作吗?除了 WPF 中的 BitmapImage 之外,我还可以使用任何其他类来实现我的目标并避免这个 .dll 吗?BitmapImage 甚至是需要这个 .dll 的类吗?我认为这是因为它是我添加的唯一破坏我的应用程序的新代码。

4

2 回答 2

2

您是在制作 32 位还是 64 位 WinPE 环境?

从外观上看,您的 WPF 应用程序使用“任何 CPU”作为平台,因此当应用程序运行时,它会期望在 32 位平台上运行时可以使用 32 位版本的 mscms.dll,而在运行时可以使用 64 位 mscms.dll。在 64 位平台上运行。

您需要确保复制与您决定使用的“位”WinPE 环境相匹配的 mscms.dll。

WinPE x64 不支持 WOW64(Windows 64 位上的 Windows 32 位)...因此将应用程序编译为“x86”(即 32 位)并提供 32 位 mscms.dll 不是一种选择。

因此,请确保您复制正确的 32 位或 64 位 mscms.dll ......取决于您的 PE 位数。

您“可能”能够通过遵循此处的一些建议创建自己的自定义 PE 构建/映像,将 WOW64(Windows 64 位上的 Windows 32 位)添加到 WinPE x64:

于 2013-06-21T00:11:58.753 回答
0

好吧,经过更多的侦探工作后,问题是 C# 中的 BitmapImage 类最终归结为 32 位本机 .DLL,它在 64 位 WinPE 中不起作用。

我通过在 32 位 WinPE 中运行我的应用程序来确认这一点。那么,除了 BitmapImage 类之外,有没有人知道在 WPF 中呈现图像的任何其他方式?

:-)

于 2013-06-24T21:11:20.027 回答