【问题标题】:How does Windows 7 determine, if you need admin rights? (vc60)Windows 7 如何确定您是否需要管理员权限? (vc60)
【发布时间】:2015-06-20 07:22:36
【问题描述】:

问题:我正在用 C++ 为安装程序编写单元测试。安装程序需要管理员权限,但单元测试不需要。在开始测试时,我被要求以管理员身份启动测试/程序。

当我包含原始项目的 rc 文件时,这开始发生了。

编辑:我正在将此项目升级到 VS2010,但仍然使用 vc60,因此没有清单支持。这可能是相关的。

【问题讨论】:

  • 没有什么理由不告诉我们 .rc 文件包含什么内容。但是,是的,让它包含一个使用 requireAdminstrator 的清单是请求 UAC 提升的正常方式。
  • 关于答案,这是不好的部分:VALUE "FileDescription", "Setup Module" VALUE "InternalName", "SETUP" VALUE "OriginalFilename", "SETUP.EXE" VALUE "ProductName", “设置模块”这里没有定义清单这样的东西:)

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


【解决方案1】:

评估应用程序所需权限的一个标准是名称。 因此,如果名称​​包含“设置”一词,您将被要求提供管理员权限。

此外,由于这从 rc 文件开始,另一个标准是写入 rc 文件中“版本”下的名称。在我的情况下是“VS_VERSION_INFO”。 以下条目不应包含单词Setup:

FileDescription
InternalName
OriginalFilename
ProductName

您可以将任何出现的“设置”更改为“设置”。那会阻止对话。 尽管如此,您可能无法在“真正的”rc 文件中更改它。

【讨论】:

  • 或者您可以添加一个清单文件,明确告诉 Windows 您是否需要管理员权限。
  • 感谢您提供此信息,如果这是正确的。如果存在,您能否指出官方文档?假设信息是正确的,这对于微软来说几乎不是空洞和对用户充满敌意的,肯定还有更多吗?
  • 我没有找到任何官方资源,但通过尝试发现。不过,如果您没有明显的支持,这可能只是一个问题,就像我在这种情况下所做的那样。这里只有一条评论:msdn.microsoft.com/en-us/library/bb384608.aspx
【解决方案2】:

通常,资源包含清单,清单的一部分说明程序是否需要管理员访问权限。由于这是一个设置实用程序,它可能有一个需要管理员访问权限的清单,并且您的测试在它尝试共享资源文件时选择了它。

(其他人在谈论用于猜测程序在没有清单时是否需要管理员访问权限的启发式方法。例如,如果您有一个在清单文件常见之前制作的旧程序,操作系统可能尝试通过在文件名中查找某些短语(例如“setup”)来猜测它是否是安装程序。我相信还有其他启发式方法。这是针对在清单之前编写的旧程序的黑客攻击,可以明确声明您的需求供管理员访问。)

您可以通过提供自己的清单来解决问题。最简单的方法是使用/MANIFESTUAC 链接器选项。

如果您使用的是较旧的工具链,您可能必须自己制作清单文件并将其包含在您的资源中。

清单是一大块 XML。对您来说重要的部分如下所示:

<?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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 2017-09-21
    • 1970-01-01
    • 2011-09-23
    • 2011-03-06
    • 2014-05-31
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多