如何使用Windows 10的清单设置管理员权限?

ThN*_*ThN 0 windows delphi administrator manifest access-denied

我正在使用Delphi XE for Windows 10开发软件,我必须以10的管理员权限运行我的软件.如果我右键单击exe文件并以管理员身份运行它,它不会引发任何错误,但如果我运行它以任何其他方式程序引发错误消息Access Denied.所以,它需要有管理员身份.最初我认为你可以使用任务调度程序来完成这个任务,但它也有问题.现在,我正在学习我需要自定义清单才能在Windows 10上执行此操作.因此,在浏览了一些stackoveflow问题,博客和网站后,我为我的程序创建了一个清单,如下所示,但是当我运行我的程序时它仍然会引发Access Denied错误信息.

这就是我做的:

使用NOTEPAD创建清单文件(GeoMonitor.manifest):

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<assemblyIdentity version="1.1.1.1">
processorArchitecture="*"
name="GeoMonitor"
type="win32" />
<description>elevate execution level</description>
<dependency>
<dependentAssembly>
<assemblyIdentity>
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustinfo xmlns="urn:schemas-microsoft-com:asm.v2"><security>
<requestedPrivileges>
<requestedExecutionlevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustinfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)

使用NOTEPAD创建RC文件GeoMonitor.rc

1 24 GeoMonitor.manifest
Run Code Online (Sandbox Code Playgroud)

在取消选中Enable Run Time Theme项目选项中的选项后,将这两个文件链接到我的项目文件.

在此输入图像描述

最后,我没有问题地编译了我的项目文件,然后在Windows 10上测试了编译的exe文件.它仍然作为用户而不是管理员运行.我究竟做错了什么?

更新: 我的项目选项 - 资源编译器部分有什么我需要设置的吗?

在此输入图像描述

Dav*_*nan 6

我认为你有两个问题:

  1. 您无法将.rc资源脚本文件编译为扩展名为.res的已编译资源,并将其链接.您不应链接.rc文件或.xml文件.您需要链接已编译的.res文件.使用brcc32或rc编译资源脚本.
  2. 我可以告诉您没有链接.res文件,因为您的清单无效.如果您已经编译并链接了它,那么加载器会因清单无效而拒绝您的可执行文件.

这是您需要的最低清单:

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

很明显,你会想要添加更多内容,但从这里开始,使用已知良好的清单文件.证明它按预期工作.然后添加更多功能.

最后要说的是,我怀疑你一直习惯于禁用UAC.这是一个非常糟糕的主意,对开发人员来说更是如此.如果您在过去10年中使用UAC,那么您很久以前就会遇到所有UAC /标准用户问题.

  • 关于UAC,开发人员的评论+1,请停止制作需要管理员权限的软件.在10次中有9次真的不需要,只是懒惰.你的窗户安全性降低了. (2认同)