Como faço para adicionar um manifesto a um usando Mt.exe executável?
Pergunta
Eu estou tentando usar Mt.exe do Windows SDK para adicionar um manifesto para um arquivo executável que não tem um, utilizando a seguinte linha de comando:
C:\winsdk61>mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -updateresource:"r:\shared\hl33m.exe;#1"
Infelizmente, quando eu faço, eu recebo este erro:
mt.exe : general error c101008c: Failed to read the manifest from
the resource of file "r:\shared\hl33m.exe". The specified resource
type cannot be found in the image file.
Claro que o recurso não foi encontrado no arquivo -. O arquivo não tem um manifesto, é por isso que eu quero adicionar um
Como posso acrescentar um manifesto para um arquivo executável? Isso não deveria ser simples?
Solução
Você deve usar / outputresource em vez de / UpdateResource:.
A linha de comando correta seria:
mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -outputresource:"r:\shared\hl33m.exe;#1"
Outras dicas
Isso funcionou para mim para VS 2005:
- Criar arquivo de texto chamado após executável com manifesto de extensão, e garantir que ele está localizado no mesmo caminho que seus arquivos de código; ou seja Form1.cs, etc. Por exemplo, se o seu nome do aplicativo é UACTester.exe então o seu arquivo de manifesto deve ser nomeado UACTester.exe.manifest.
- Certifique-se o conteúdo do manifesto é bom. Eu uso este:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator"
uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet"
version="1" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
</application>
</compatibility>
</asmv1:assembly>
-
Em seu projeto executável, adicione o seguinte evento pós-compilação:
"$(DevEnvDir)..\Tools\Bin\mt.exe" -nologo -manifest "$(TargetPath).manifest" -outputresource:"$(TargetPath)"
Espero que isso ajude. Boa sorte! -Matt Esterak
Você também pode usá-lo como este para incorporar o manifesto dentro do arquivo EXE:
Mt.exe -nologo -manifest "r: \ shared \ hl.exe.manifest" -outputresource: "r: \ shared \ hl33m.exe; 1"