【问题标题】:How to make your MFC application bypass UAC in windows7 and Vista如何让你的 MFC 应用程序绕过 windows7 和 Vista 中的 UAC
【发布时间】:2011-01-16 02:05:39
【问题描述】:
我有一个在 VS Studio 2008 中开发的 MFC 应用程序,它读取和写入其安装文件夹中的 JSON 文件。它在 vista(管理员)中完美运行,但仅当 UAC 关闭时。当 UAC 打开时,应用程序无法写入其 JSON 文件。我想我必须创建一个清单文件,但我还没有真正尝试过创建一个。
问题:
-
参考:http://msdn.microsoft.com/en-us/library/bb384691.aspx。
它在这里说您可以简单地在 Visual Studio 开发环境中设置链接器选项。
我需要选择哪些值:
a) 启用用户帐户控制 (UAC)? [我试过没有]。
b) UAC 执行级别? [我尝试了最高可用]。
c) 和 UAC 绕过 UI 保护? [我试过是的]。
是否需要在软件包(exe、Dll等)中添加manifest文件?
谢谢...
【问题讨论】:
标签:
mfc
visual-c++
uac
windows-vista
【解决方案1】:
您应该将此文件复制到 AppData。修改 Program Files 中的文件将始终触发 UAC 提示。此操作需要管理员权限,manifest 对此无能为力。
【解决方案2】:
UAC 的整个概念是你不能绕过它。如果可以,那就没用了。
唯一的解决方案(这是你无论如何都应该做的,不仅仅是因为 UAC)是永远不要在安装文件夹中写入文件,而是在它所属的 %APPDATA% 中写入文件。
【解决方案3】:
添加清单文件只能声明应用程序需要 UAC 权限。这样,在应用程序启动时将提示用户输入 UAC。
如果这是你想要的here,你可以找到描述如何去做。
其他方法是安装一个使用 LocalSystem 帐户运行的服务,并且允许(几乎)执行任何操作而无需请求 UAC 许可。为此,您必须在 UI 应用程序和服务之间实现进程间通信。必须从具有适当安全属性的服务创建进程之间共享的内核对象,以便从非提升程序访问。
该服务的安装将提示用户输入 UAC(与大多数其他安装一样)
【解决方案4】:
将 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 中的 EnableLUA DWORD 值设置为 0 并重新启动。
这将毫无问题地禁用 UAC,我会对您的所有用户执行此操作,是否有权限由您决定。
也适用于 Windows Vista 和 Windows 7。
【解决方案5】:
您提到您尝试将可执行文件显示为
- UAC 执行级别:
highestAvailable
应该设置为requireAdministrator。
不同之处在于,highestAvailable 只会在用户确实是已被 (UAC) 剥夺其管理员权限的管理员时提升。如果他们真的是标准用户,那么它不会提升。
另一方面,requireAdministrator 将要求他们提升。如果用户不是管理员,则会提示他们输入是管理员的用户名和密码;他们将不得不打电话给某人下来并输入他们的用户名和密码。
如果用户已经是管理员,那么requireAdministrator 只会要求他们继续。