使用 EasClientDeviceInformation 获取 SystemFirmwareVersion 时收到 InvalidCastException

Receiving InvalidCastException when obtaining SystemFirmwareVersion using EasClientDeviceInformation

我正在使用 EasClientDeviceInformation class 获取有关用户设备的信息。

使用这两行

EasClientDeviceInformation deviceInfo = new EasClientDeviceInformation();
var version = deviceInfo.SystemFirmwareVersion;

在第二行生成一个 InvalidCastException。完整的错误详细信息是:

Unable to cast object of type 'Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation' to type 'Windows.Security.ExchangeActiveSyncProvisioning.IEasClientDeviceInformation2

此代码非常标准,只会让我相信对于我的系统来说 SystemFirmwareVersion 可能无法获得。但是,我不明白为什么这必然会引发强制转换异常。显然,从 EasClientDeviceInformationIEasClientDeviceInformation2 的转换导致了这里的问题,但这是 EasClientDeviceInformation class 的内部问题,而不是我自己的代码。为什么会这样?

您的 post 同时带有 windows-10windows-8.1 标签,这令人困惑。

2 接口在 Windows 8.1 上根本不存在(它是在 Windows Phone 中引入的),所以这段代码永远不会在 Windows 8.1 台式机(你将无法使用默认项目模板编译代码)。

2 接口确实存在于 Windows 10 中,但您可能使用的是更早的 OS 版本,但(还)没有实现;建议您更新到最新版本('162 或更高版本)。也就是说,我 认为 这个 属性 在桌面上总是 returns 一个空字符串。

[2015 年 7 月 10 日新增]

另一件要记住的事情是,由于此 API 并非在所有设备系列(仅移动设备和桌面设备)中都存在,因此您应该使用 ApiInformation class 检查是否存在API 在 Windows 上使用它之前 10. 这样,当 运行 在 Xbox 或其他一些设备上时,您的应用程序不会崩溃。