我正在开发一个针对 .NET 3.5 的 32 位应用程序;VS2010是我的开发工具。我的应用程序需要提升权限来执行各种操作,因此我有一个应用程序清单,其中包含以下行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

因为这是正确的做法,所以我还在清单中添加了指示该应用程序与 Windows 7 和 Windows Vista 兼容的行:

<!--The ID below indicates application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>

该应用程序在 Windows 7 和 Windows Vista 上运行良好。立即弹出UAC提示,不受注册表虚拟化等影响。清单显然在那里起作用。

然而,在 2008 R2 上,这些都不是真的。不出现UAC提示。注册表虚拟化发生了(我的主要问题)。就像它完全忽略了我的应用程序清单。我不知道去哪里看或检查什么。我在 7、Vista 和 2008 R2 上运行了完全相同的位,每次都得到完全相同的结果。我的 2008 R2 安装完全是普通的,因为它只是一个新安装的用于测试的虚拟机。

另外,我相当确定 Server 2008 的行为就像 2008 R2 一样,基本上忽略了清单。任何帮助将不胜感激!

有帮助吗?

解决方案

我已经找到了我自己问题的奇怪答案,尽管它分为两部分:

  • 由于某种原因,我在 2008 或 2008 R2 中都没有收到 UAC 提示,但在这两种情况下,应用程序都得到了正确提升并且应用程序虚拟化 被禁用 正确。

  • 我的应用程序是 32 位的,正在写入 Wow6432Node 注册表项,因此我认为虚拟化正在发生,因为我的更改没有出现。如果我在 2008 x86 上进行了测试(而我没有这样做),我会发现这些更改出现在那里,但没有出现在 x64 操作系统中。

其他提示

服务器2008 R2具有UAC默认关闭。如果它关闭,然后从管理员组的用户拥有完全管理权限和非管理员用户没有他们,不能提升到管理员帐户。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top