从纯 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 应用读取组策略设置的主要内容,如果未能解决你的问题,请参考以下文章

09组策略之软件分发(01-02)

组策略6.组策略处理顺序说明

域控制器学习笔记组策略

域控中将组策略应用到安全组

计算机配置与组策略配置的区别---运维笔记

windows_learn 004 ADDS基础知识和组策略