用户帐户控制 (UAC) 如何影响应用程序

用户帐户控制 (UAC) 是 Windows Vista 的一项功能,其中用户帐户具有有限的特权。 可以在下列站点找到关于 UAC 的详细信息:

在启用 UAC 后生成项目

如果在禁用 UAC 的 Windows Vista 上生成 Visual Studio C++ 项目,并在以后启用 UAC,必须清理并重新生成项目,该项目才能正常工作。

需要管理特权的应用程序

默认情况下,Visual C++ 链接器会将 UAC 片段嵌入具有 asInvoker 执行级别的应用程序清单中。 如果应用程序需要管理特权才能正确运行(例如,修改注册表的 HKLM 节点或者写入磁盘的受保护区域,如 Windows 目录),则必须修改应用程序。

第一个选项是修改清单的 UAC 片段,将执行级别更改为 requireAdministrator。 然后,应用程序在运行之前将提示用户提供管理凭据。 有关如何执行此操作的信息,请参阅 /MANIFESTUAC(在清单中嵌入 UAC 信息)

第二个选项是通过指定 /MANIFESTUAC:NO 链接器选项不将 UAC 片段嵌入到清单。 在这种情况下,应用程序将以虚拟化方式运行。 在应用程序结束后,对注册表或文件系统的任何更改将不会保留。

下面的流程图描述了应用程序的运行方式取决于是否启用了 UAC 和应用程序是否有 UAC 清单:

Flowchart of Windows Loader behavior.

另请参阅

安全性最佳做法