使用更新资源将UAC清单文件附加到任何PE

opc*_*0de 2 delphi resources uac

我想构建一个简单的工具,将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
Run Code Online (Sandbox Code Playgroud)

代码工作的资源出现在exe中,但它不起作用.任何想法为什么?

Ser*_*yuz 5

看起来你不能给清单资源一个任意的名字,试试吧

UpdateResource(myRes,MakeIntResource(24),MakeIntResource(1),1033,test,length(test));
Run Code Online (Sandbox Code Playgroud)


来自winuser.h:

#define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE( 1)
Run Code Online (Sandbox Code Playgroud)


指定默认激活上下文

执行.EXE时,将隐式激活资源ID 1(CREATEPROCESS_MANIFEST_RESOURCE_ID).