从纯 UWP 应用读取组策略设置
Posted
技术标签:
【中文标题】从纯 UWP 应用读取组策略设置【英文标题】:Reading Group Policy settings from pure UWP app 【发布时间】:2020-05-24 23:44:12 【问题描述】:我有一个 C# Windows 程序正在读取由管理员使用 ADMX 设置的自定义组策略设置。 目前,该应用正在直接读取反映组策略设置的注册表值。
现在,我想制作这个应用程序的纯 UWP 版本(最好不使用桌面桥),它应该直接从 Microsoft Store 安装。我已经看到in another question 这种应用程序无法访问 Windows 的注册表。但是,可能有专门针对组策略的专用 API - 但没有很好的文档记录 (see here)。
那么 - 纯 UWP 应用有什么方法可以读取组策略设置?
【问题讨论】:
您可以创建一个新项目,然后将可执行文件设置为以管理员身份运行。然后从 UWP 调用新项目。这样,不以管理员身份运行的主项目可以从新的可执行文件中读取组策略。 如果您可以从 UWP 应用程序访问组策略或注册表,您将违反这些应用程序的目的,即阻止您执行此类操作。您指出的第二个链接适用于具有“完全信任”的安装程序,正如@jdweng 指出的那样,您需要创建一个可以作为管理员运行的应用程序以充当服务。您可以这样做:docs.microsoft.com/en-us/windows/uwp/launch-resume/… 您的链接所做的正是我的建议。我说“本文的重点是创建和使用在单独的后台进程中运行的应用服务”。我的建议是创建一个“单独的流程”。 组策略在桌面和其他通用平台(如 Xbox、Phone 和 Windows 10X)之间不一致,因此您想出的任何东西都不会通用。通用版是Windows.Management.Policies。 【参考方案1】:从纯 UWP 应用读取组策略设置
目前,UWP 不支持直接访问组策略。如本案例reply 所述,您可以使Brokered Windows Runtime Component
或desk-bridge 间接访问regedit。对于纯 UWP 应用程序,它无法做到这一点,如果您确实需要此功能,请随时使用 Windows Feed Hub 应用程序发布您的要求。
更新
目前还没有这样的api可以直接在uwp平台内访问组策略。但是 API 的 WACK 列表已更新为允许注册 API。 (实际上,它们适用于任何版本的 Windows 10,而不仅仅是 1809),这意味着您可以使用win32 api 访问组策略。如果您想从托管代码中使用,您可以查看用于 C# 包装器的 pinvoke。请注意,如果您在 UWP 应用中使用了 pinvoke,则不允许发布到存储。
【讨论】:
谢谢,但您链接到我在原始问题中提到的同一个讨论 - 它说 UWP 应用程序无法访问注册表。但另一篇文章(由 Microsoft 撰写)提到最近的 UWP 应用程序应该能够专门访问 GP - 只是不清楚具体如何。 那是与桌面桥应用相关的,不是纯粹的 uwp 应用。 更好的方法是为你的纯uwp应用做win32扩展,详细步骤可以参考tutorial。 谢谢。文章明确指出Starting in Windows 10 1809, if your app is a Universal Windows Platform (UWP) app it can access the same Group Policy keys
,所以听起来UWP应用程序应该能够在不依赖win32扩展、桌面桥等的情况下做到这一点。也许只是措辞不好:)
@YoavFeuerstein 如果您的企业应用程序是通过您的企业应用商店侧载或交付的,那么它不会通过 Windows 应用商店,因此 Windows 应用商店是否接受是无关紧要的。以上是关于从纯 UWP 应用读取组策略设置的主要内容,如果未能解决你的问题,请参考以下文章