问题:我正在用 C++ 为安装程序编写单元测试。安装程序需要管理员权限,但单元测试不需要。开始测试时,系统会要求我以管理员身份启动测试/程序。
当我包含原始项目的 rc 文件时,这种情况就开始发生。
编辑:我正在将此项目升级到VS2010,但仍在使用vc60,因此没有明显的支持。这可能是相关的。
最佳答案
通常,资源包含一个 list , list 的一部分说明程序是否需要管理员访问权限。由于这是一个设置实用程序,因此它可能有一个需要管理员访问权限的 list ,并且您的测试在它尝试共享资源文件时拾取了它。
(其他人正在谈论用于猜测程序在没有 list 时是否需要管理员访问权限的启发法。例如,如果您有一个在 list 文件常见之前创建的旧程序,操作系统可能会尝试通过在文件名中查找某些短语(例如“setup”)来猜测它是否是一个安装程序。我相信还有其他启发式方法。这是对旧程序的一种破解,这些程序是在 list 可以明确声明您的需求之前编写的供管理员访问。)
您可以通过提供自己的 list 来解决您的问题。最简单的方法是使用 /MANIFESTUAC
链接器选项。
如果您使用的是较旧的工具链,您可能必须自己制作 list 文件并将其包含在您的资源中。
list 是一个 XML block 。对您来说重要的部分看起来像这样:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="yourprogram.exe" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
要将其嵌入到您的资源中,您的 .RC 文件应具有:
1 RT_MANIFEST <filename>
如果您的 SDK 太旧而未定义 RT_MANIFEST
,您可以自己定义它:
#define RT_MANIFEST 24
关于c++ - Windows 7 如何确定您是否需要管理员权限? (vc60),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29631480/