在WinRT中可以询问当前的操作系统版本吗?

时间:2012-09-21 15:33:21

标签: windows-8

使用WinRT可以确定当前操作系统是否为:

  1. Windows RT
  2. Windows 8 Core
  3. Windows 8 Pro
  4. Windows 8 Ent
  5. 有可能吗?

    请注意,问题(http://stackoverflow.com/questions/10125324/get-os-version-in-winrt-metro-app-c-sharp)似乎是重复的,但它是预先发布的题。许多API在整个版本中都有所改变。这个问题的答案是,这是不可能的。这仍然是真的吗?当然没有。

4 个答案:

答案 0 :(得分:1)

如果可以做到,那就不容易了,必须从运行系统的数据中推断出来。不幸的是,文档对此非常不清楚。例如,Metro样式应用程序允许GetNativeSystemInfo functionSee this list

但是,GetNativeSystemInfo的文档链接到an example有关如何获取使用Metro风格应用列表中的几个API的操作系统版本,但示例仍然是在Metro docs下。还不清楚response from GetNativeSystemInfo在ARM处理器上的含义。

最重要的是,这是一种糟糕的方法,必然会导致代码的脆弱性。我的建议是避免尝试这样做。

答案 1 :(得分:0)

通过使用设备API获取低级系统组件(如HAL)的驱动程序版本号,您可以获得操作系统版本号,但可能存在风险可能不正确。

http://attackpattern.com/2013/03/device-information-in-windows-8-store-apps/有更多信息和示例代码(披露,我写了这篇帖子和代码)

答案 2 :(得分:0)

是的,使用webview似乎是一种可靠且快速的方式来获取正在运行的处理器。确定专业与企业。不,我找不到办法。

但是,如果您对如何确定处理器感兴趣并从那里开始? 在这里查看我的答案:https://stackoverflow.com/a/16996176/265706

答案 3 :(得分:-1)

看看这个:

http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.packageid.architecture.aspx

var architecture = packageId.architecture;


var package = Windows.ApplicationModel.Package.current;
var packageId = package.id;
var version = packageId.version;

var output = [ "Name: \"" + packageId.name + "\"",
           "Version: " + version.major + "." + version.minor + "." 
                       + version.build + "." + version.revision,
           "Architecture: " + packageId.architecture,
           "ResourceId: \"" + packageId.resourceId + "\"",
           "Publisher: \"" + packageId.publisher + "\"",
           "PublisherId: \"" + packageId.publisherId + "\"",
           "FullName: \"" + packageId.fullName + "\"",
           "FamilyName: \"" + packageId.familyName + "\"",
           "IsFramework: " + package.isFramework ];