【问题标题】:requestedExecutionLevel in manifest file and failing CopyFile() function清单文件中的 requestedExecutionLevel 和失败的 CopyFile() 函数
【发布时间】:2010-09-29 15:35:33
【问题描述】:

只是尝试使用 CopyFile() 函数将文件从当前目录复制到 C:\windows\system32\drivers。

我还编写了清单,其中包含“requestedExecutionLevel level="highestAvailable"”,然后我运行 mt 将其添加到生成的可执行文件中。

当我尝试运行它时,弹出 Windows 7 UAC 对话框,我按“是”,但 CopyFile() 返回“拒绝访问”错误。 怎么了?我应该检查什么?

我的清单文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
     <v3:security>
       <v3:requestedPrivileges>
         <v3:requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
       </v3:requestedPrivileges>
     </v3:security>
   </v3:trustInfo>
 </assembly>

我的一段 C 代码:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    if (CopyFile ("aaa.sys", "C:\\windows\\system32\\drivers", FALSE)==FALSE)
        ErrorExit ("CopyFile");

【问题讨论】:

  • 您是否要覆盖 TrustedInstaller 拥有的 MS 文件?或者正在使用的东西?
  • 不,我正在写一个以前不存在的文件
  • 既然你说你看到了 UAC 对话框,关于你的清单是否正确或正确附加的答案是错误的。你正在提升。
  • 凯特,为什么 CopyFile 失败了?
  • GetLastError() 返回什么?

标签: c winapi uac


【解决方案1】:

嗯,不太确定“highestAvailable”是做什么的。消除所有疑虑并改用“requireAdministrator”,这总是可以获得完整的管理员权限。还要确保使用正确的资源名称和 ID、RT_MANIFEST 和 1。

【讨论】:

  • 我通过运行附加清单:mt -manifest 1.manifest -outputresource:1.exe;1
  • 发布清单内容,什么样的操作系统,用户帐户的详细信息以及它在目录中的权限。
  • int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (CopyFile ("aaa.sys", "C:\\windows\\system32\\drivers", FALSE )==假)
  • 把它放在你的问题中。此答案将在 5 分钟内自毁。
【解决方案2】:
  • requireAdministrator = 始终需要管理员权限。
  • highestAvailable = 如果是管理员组的成员,请提升。如果是普通用户,则以普通用户身份运行,无需提升。

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2021-05-08
    • 1970-01-01
    • 2014-02-24
    • 2011-01-21
    • 1970-01-01
    • 2017-02-09
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多