【问题标题】:Why does /MANIFESTUAC:NO work?为什么 /MANIFESTUAC:NO 有效?
【发布时间】:2010-05-25 14:01:09
【问题描述】:

Windows 7、C++、VS2008 我有一个需要使用“runas 管理员”注册的 COM DLL(它是一个写入注册表的遗留应用程序) DLL 由报告应用程序使用,该应用程序使用 CoCreateInstance 对其进行实例化。除非我还以管理员身份运行报告应用程序,否则此操作失败;直到我将链接器设置从 /MANIFESTUAC 更改为 /MANIFESTUAC:NO

谁能告诉我为什么会这样?这是否意味着我可以使用此设置编写绕过 UAC 的应用程序?

【问题讨论】:

    标签: c++ visual-studio-2008 windows-7 uac manifest


    【解决方案1】:

    如果您的安装程序/注册程序应用程序有一个清单,并且显示“不要运行提升”,那么当您尝试写入 HKLM 时它会失败。如果您有一个清单并且上面写着“运行提升”,那么当您尝试写入 HKLM 时它会成功。如果您没有清单(您使用 /MANIFESTUAC:NO 请求),当您尝试写入 HKLM 时,它会改为写入虚拟化位置。

    当您运行报告应用程序时,会应用类似的三元组,尽管它可以读取 HKLM。因此,如果报告应用程序有一个清单,无论是否提升,它都会读取 HKLM。如果没有清单,它会读取虚拟化位置。这就是为什么当两个应用程序都有清单或没有清单时您会成功的原因。

    最好让您的安装程序应用程序具有请求提升的清单,而您的报告应用程序具有不请求提升的清单。这样,您的所有应用程序都在说真话,一切正常。另外,您知道为什么会这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 2018-01-04
      • 2021-05-09
      • 2011-11-10
      相关资源
      最近更新 更多