【问题标题】:Windows 7 UAC elevationWindows 7 UAC 提升
【发布时间】:2011-02-11 11:50:39
【问题描述】:

我想在我的应用程序中以管理员身份运行一个线程。我可以愉快地以默认用户级别 (asInvoker) 运行应用程序的其余部分。这可能吗?我注意到有一个“ImpersonateLoggedOnUser”功能。我可以以某种方式使用它来登录管理员,然后让线程冒充那个人吗?

似乎这应该是一件微不足道的事情......但似乎没有任何明显的方法可以做到这一点。谁能帮帮我?

编辑:因此,如果我必须启动一个单独的进程,有什么方法可以创建一个新进程并让它从特定入口点启动。我当然可以使用命令行处理来做到这一点,但我真的希望我可以阻止用户进入命令行并启动一个不可关闭的进程!

【问题讨论】:

    标签: c++ windows-7 uac windows-vista


    【解决方案1】:

    不,提升是每个进程,而不是线程。

    如果应用程序的其余部分必须以非提升方式运行,您可以使用一些参数 (myapp.exe /uac "ipcparamhere") 提升自己并使用某种 Inter-process communication 与“您的应用程序的主要实例”。 (如果提升的进程只执行一个简单的操作,你可以使用进程的退出代码来检查是否成功)

    【讨论】:

    • 是的,看起来很烦人,我可能不得不做这样的事情。不过,我会更新我的问题...
    【解决方案2】:

    这是不可能的。您需要通过在应用程序中包含清单来获得管理员权限。谷歌“requireAdministrator”找到你需要的清单。您的用户可能很快就会厌倦一遍又一遍地这样做,您最好的选择是将需要这些权限的任务分拆到一个单独的进程中。以服务为例。

    【讨论】:

    • 我知道这一点......问题是你不能从资源管理器(用户模式进程)拖放到我的应用程序(管理员进程)中。因此,除非我可以提升单个线程,否则我将需要运行一个单独的进程,这将需要相当多的重新架构:(
    • 嗯,这个想法是让您的应用程序需要管理员权限。这解决了 D+D 问题。
    • 你还停留在悲伤的五个阶段的第一阶段。如果运气好的话,您将在一周左右的时间内达到 5 个,并且可以开始让它发挥作用。
    • 您也可以使用ShellExecute 启动您自己的应用程序的副本,但传递runas 动词。这将提示 UAC 提升。
    【解决方案3】:

    您可以启动一个单独的 exe,并在上面显示一个清单,说明它需要管理员。然后确保使用使用清单的 shell execute 启动它,一切就绪。作为一个深思熟虑的触摸,在启动该线程的按钮上放置一个 UAC 屏蔽。 (如果您手动操作,请发送 BCM_SETSHIELD 消息。)

    您可以在单独的进程中决定是否需要可见窗口。同时用户仍然可以拖放到主应用程序中。

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 2011-11-18
      • 2011-02-20
      • 2011-01-17
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      相关资源
      最近更新 更多