我正在为需要 IE 在企业模式 (EM) 下运行的应用程序编写安装程序。(请不要解释为什么我不应该这样做。) EM 可以通过 Active Directory 组策略禁用(如果这导致术语错误,请告知)。在这种情况下,用户无法启用企业模式。如何在我的安装程序中检测到这种状态,以便我可以警告用户联系他们的 IT 管理员请求他们启用 EM?我假设可以阅读组策略,但代码示例会很棒。
3 回答
我们发现的一个答案是 gpresult 程序可以在客户端计算机上运行以生成组策略报告。我们的安装程序可能会运行该程序并解析其输出以找到设置。当然,如果 gpresult 可以读取组策略,那么我的安装程序可以直接调用 gpresult 调用的 Windows API。如果有人知道这些电话是什么,请回复。
您可能可以检查注册表中的值,因为您还可以通过注册表启用企业模式。虽然我还没有验证如果禁用 EM,“Sitelist”中的值是否将为空:
请检查:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode。
或者
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode。
一些有用的链接 - 打开企业模式并使用站点列表:
我做了一些搜索,以了解我们如何以编程方式执行 gpresult 所做的事情。当我按照我找到的顺序报告我发现的内容时,这有点意识流:
gpresult 实用程序用于报告 RSoP(策略结果集)。顾名思义,这给出了所有策略设置的结果。可以在使用 GPRESULT 工具执行策略查询结果集中找到一个很好的总结。它说:
If you are a consultant who works on other people’s networks though, you don’t usually have the luxury of being intimately familiar with the network’s configuration. If you get called in to diagnose a problem on a client’s network, you may be able to determine that the problem is group policy related in a matter of minutes. However, it can take days to figure out exactly which group policy element is causing the problem because the group policy can be so complex.
所以底线是,我们使用 gpresult 的输出来检测企业模式组策略可能比编写一堆代码要好得多。另一方面,似乎有直接查询 RSoP 的 API:如何通过 Windows 脚本主机 (WSH) 使用 WMI 在本地计算机上检索当前应用的 GPO。虽然本文编写了要在 WSH 中运行的代码,但我相信类似的事情可以在 C++ 代码中完成。此示例将 API 返回的字典结构转储到控制台。我们的代码大概只检查字典中的单个值。或者它可能必须在字典中找到某个设置。如果找到,则检查其值。如果未找到,则可以假定没有组策略集。
有一种方法可以在 C++ 中进行 RSoP 查询。起点似乎是 IGPM::GetRSOP。