如何解决使用更新资源将UAC清单文件附加到任何PE
| 我想构建一个简单的工具来将UAC清单文件附加到给定的exe文件,代码可以正常工作,但是什么也没有发生。我必须说,当我用mainfest文件手动编译时,它可以正常工作。procedure TForm1.Button1Click(Sender: TObject);
var
myRes:THandle;
test:PChar;
begin
test:=\'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\'+#13#10+
\'<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\'+#13#10+
\'<assemblyIdentity version=\"1.1.1.1\"\'+#13#10+
\'processorArchitecture=\"X86\"\'+#13#10+
\'name=\"[APP TO TEST WITH]\"\'+#13#10+
\'type=\"win32\"/>\'+#13#10+
\'<description>elevate execution level</description>\'+#13#10+
\'<trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\'+#13#10+
\'<security>\'+#13#10+
\'<requestedPrivileges>\'+#13#10+
\'<requestedExecutionLevel level=\"requireAdministrator\" uiAccess=\"false\"/>\'+#13#10+
\'</requestedPrivileges>\'+#13#10+
\'</security>\'+#13#10+
\'</trustInfo>\'+#13#10+
\'</assembly> \';
myRes := BeginUpdateResource(\'testuac.exe\',false);
UpdateResource(myRes,MakeIntResource(24),\'1\',1033,test,length(test));
EndUpdateResource(myres,false);
ShowMessage(SysErrorMessage(GetLastError));
end;//Compiled with Delphi 7
该代码可以使资源显示在exe内,但是不起作用。有什么想法吗?
解决方法
看来您不能给清单资源指定任意名称,请尝试
UpdateResource(myRes,MakeIntResource(24),MakeIntResource(1),1033,test,length(test));
从winuser.h:
#define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE( 1)
从指定默认激活上下文开始
资源ID 1
(CREATEPROCESS_MANIFEST_RESOURCE_ID)
.EXE被隐式激活
被执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。