c++ - Windows 7 如何确定您是否需要管理员权限? (vc60)

标签 c++ windows visual-studio visual-c++-6 administrator

问题:我正在用 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/

相关文章:

windows - 从非交互式进程(Windows 服务、计划任务等)在 WinServer 2008 中打印 PDF

windows - 如何诊断、调试 MinGW-get GUI (guimain.exe) 崩溃?

javascript - 使用 Razor 维护 @section 标记内的 Javascript 代码突出显示

c++ - typedef 中 C 风格数组的维度

c++ - AVR C++ uint32_t 奇怪的行为

c++ - 链接列表 - 几乎完成,但在某处仍然存在小问题。需要帮助

c# - 二十一点纸牌、字符串或整数的数组?

c++ - 搜索链表是否为空

java - 列出所有进程?

java - 我如何对这个 ui 框进行编程