【问题标题】: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 文件。我想我必须创建一个清单文件,但我还没有真正尝试过创建一个。

问题:

  1. 参考:http://msdn.microsoft.com/en-us/library/bb384691.aspx。 它在这里说您可以简单地在 Visual Studio 开发环境中设置链接器选项。 我需要选择哪些值:
    a) 启用用户帐户控制 (UAC)? [我试过没有]。

    b) UAC 执行级别? [我尝试了最高可用]。

    c) 和 UAC 绕过 UI 保护? [我试过是的]。

  2. 是否需要在软件包(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 只会要求他们继续

          【讨论】:

            猜你喜欢
            • 2011-10-03
            • 2013-05-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-05
            • 2012-05-29
            • 2011-02-20
            • 1970-01-01
            相关资源
            最近更新 更多