为什么/ MANIFESTUAC:没有用?

时间:2010-05-25 14:01:09

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

最好让您的安装程序应用程序带有要求提升的清单,并且您的报告应用程序有一个不请求提升的清单。这样你所有的应用程序都说实话,一切正常。另外你知道它为什么会发生。