2013-07-25 90 views
2

简单的问题 - 我在Store中获得了Windows 8“Metro”应用程序,并以某种方式在Windows 8.1 Preview中崩溃。我想发布更新的Windows 8应用程序,修复了Windows 8.1的行为,基本上禁用了一个应用程序的功能,如果它在Windows 8.1上运行,但保留给Windows 8用户。
由于目前尚不可能发布针对Windows 8.1编译的应用程序,因此我需要在Windows 8应用程序中提供此修复程序。如何检测我的Windows 8应用程序,它在Windows 8.1上运行?

那么如何检测我的应用程序内的Windows 8版本?

+0

可能有帮助,http://stackoverflow.com/questions/16975386/could-i-know-if-my-app-is-running-on-windows-rt-with-c/16996176#16996176 – Xyroid

+0

可能[我们如何检查当前的操作系统是win8还是蓝色](http://stackoverflow.com/questions/17406850/how-can-we-check-if-the-current-os-is-win8-or -blue) –

回答

1

我用下面的代码来检测我赢8应用OS(尽管它的js应用程式,你应该能够轻松地将它翻译成C#):

var ROOT_CONTAINER = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"; 
var MANUFACTURER_KEY = "System.Devices.Manufacturer"; 
var ITEM_NAME_KEY = "System.ItemNameDisplay"; 
var MODEL_NAME_KEY = "System.Devices.ModelName"; 
var DEVICE_CLASS_KEY = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10"; 
var DEVICE_CLASS_KEY_NO_SEMICOLON = '{A45C254E-DF1C-4EFD-8020-67D146A850E0}10'; 
var PRIMARY_CATEGORY_KEY = "{78C34FC8-104A-4ACA-9EA4-524D52996E57},97"; 
var ROOT_CONTAINER_QUERY = "System.Devices.ContainerId:=\"" + ROOT_CONTAINER + "\""; 
var HAL_DEVICE_CLASS = "4d36e966-e325-11ce-bfc1-08002be10318"; 
var DEVICE_DRIVER_VERSION_KEY = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3"; 
var pnpObject = Windows.Devices.Enumeration.Pnp.PnpObject; 
var displayProperties = Windows.Graphics.Display.DisplayProperties; 
var applicationView = Windows.UI.ViewManagement.ApplicationView; 
var appViewState = Windows.UI.ViewManagement.ApplicationViewState; 

function getHalDevice(property) { 
    var properties = [property, DEVICE_CLASS_KEY]; 

    return pnpObject.findAllAsync(Windows.Devices.Enumeration.Pnp.PnpObjectType.device, properties, ROOT_CONTAINER_QUERY).then(function(rootDevices) { 

     for (var i = 0; i < rootDevices.length; i++) { 
      var rootDevice = rootDevices[i]; 
      if (!rootDevice.properties) continue; 
      if (rootDevice.properties[DEVICE_CLASS_KEY_NO_SEMICOLON] == HAL_DEVICE_CLASS) { 
       return rootDevice; 
      } 
     } 
    }); 
} 

getHalDevice(DEVICE_DRIVER_VERSION_KEY).done(function (halDevice) { 
    if (!halDevice || !halDevice.properties[DEVICE_DRIVER_VERSION_KEY]) { 
     deviceInfo.os.name = 'unknown'; 
     return; 
    } 

    var halName = halDevice.properties[DEVICE_DRIVER_VERSION_KEY]; 
    deviceInfo.os.number = halName; 
    if (halName.indexOf('6.2.') > -1) { 
     deviceInfo.os.name = 'Windows 8'; 
     return; 
    } 
    if (halName.indexOf('6.3.') > -1) { 
     deviceInfo.os.name = 'Windows 8.1'; 
     return; 
    } 

    deviceInfo.os.name = 'unknown'; 
    return; 
}); 

我测试过这种方法既在Win 8和Win 8.1并每次正确识别操作系统。

这是一个JavaScript端口http://attackpattern.com/2013/03/device-information-in-windows-8-store-apps/,非常感谢@DamienG展示了这样做的方式,因为它有点疯狂。

+1

不错,你错过了Damien页面的4条版权声明http://attackpattern.com/2013/03/device-information-in-windows-8-store-apps/ =/ – TheCodeJunkie

+1

@DamienG,学分补充说,对此感到遗憾。 –

+1

@TheCodeJunkie学分补充说,我的坏。我没有简单地从博客文章中复制它,它是我在我的应用程序中使用的代码,它是Damien代码的JavaScript端口,有一些变化。 –

相关问题