Прикрепите файл манифеста UAC к любому PE с помощью ресурса обновления - PullRequest
2 голосов
/ 29 мая 2011

Я хочу создать простой инструмент для прикрепления файла манифеста 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, но он не работает. Любая идея почему?

1 Ответ

5 голосов
/ 29 мая 2011

Казалось бы, вы не можете дать произвольное имя ресурсу манифеста, попробуйте

UpdateResource(myRes,MakeIntResource(24),MakeIntResource(1),1033,test,length(test));


Из winuser.h:

#define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE( 1)


С Указание контекста активации по умолчанию

ИД ресурса 1 (CREATEPROCESS_MANIFEST_RESOURCE_ID) активируется неявно, когда .EXE выполняется.

...