0

我正在开发一个面向 .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 安装完全是普通的,因为它只是一个新安装的用于测试的 VM。

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

4

2 回答 2

0

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

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

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

于 2010-11-19T20:09:46.007 回答
0

Server 2008 R2 默认关闭 UAC。如果它被关闭,则来自管理员组的用户拥有完整的管理员权限,而非管理员用户没有这些权限,并且无法提升为管理员帐户。

于 2011-03-04T12:17:26.057 回答