运行时以编程方式读取UWP应用清单中的已启用功能
在UWP运行时获取已启用的应用功能
刚好我之前做UWP SDK开发时也碰到过这个问题——直接读取Package.appmanifest文件在运行时根本走不通,毕竟UWP的沙箱限制了对这类文件的直接访问。不过微软已经提供了官方的运行时API,可以直接获取当前应用已启用的所有功能,完全不需要手动解析XML。
下面是具体的实现步骤和代码示例:
核心思路
利用Windows.ApplicationModel.Package类的相关属性,直接从系统获取当前应用已注册的功能信息,这些信息就是清单里声明并启用的内容。
代码实现(C#)
using Windows.ApplicationModel; using System.Diagnostics; // 获取当前应用的Package实例 var currentPackage = Package.Current; // 获取所有已启用的功能集合 var enabledCapabilities = currentPackage.Capabilities; // 遍历并处理每个功能 foreach (var capability in enabledCapabilities) { // 功能的官方标识名称(比如"internetClient"、"location") string capabilityId = capability.Name; // 本地化后的功能显示名称 string displayName = capability.DisplayName; // 这里可以根据你的SDK需求,将这些信息返回或记录 Debug.WriteLine($"已启用功能:{capabilityId} | 显示名称:{displayName}"); }
额外说明
- 区分功能类型:如果需要区分功能的类别(比如设备功能、文件访问功能等),可以使用
capability.Kind属性,它是PackageCapabilityKind枚举,包含Device、Internet、MusicLibrary等多种类型。 - 受限功能支持:对于需要额外授权的受限功能(比如
enterpriseAuthentication),只要应用清单里已经声明并通过审核,这个API也能正常获取到。 - 沙箱安全:这个方法完全符合UWP的沙箱规则,不需要申请额外的文件访问权限,非常适合SDK集成使用。
内容的提问来源于stack exchange,提问作者Greg Thatcher
相关产品推荐
相关产品推荐

