UAC: el archivo de manifiesto se ignora
-
22-07-2019 - |
Pregunta
Uno de mis ejecutables escribe alguna configuración en un archivo XML en C: \ Archivos de programa \ MyApp \ config.xml. Debe ejecutarse como administrador en Vista / Server 2008, de lo contrario, el sistema operativo no le permitirá escribir en esa ubicación.
Incluí un archivo de manifiesto llamado config.exe.manifest, para solicitar automáticamente los derechos de administración en el lanzamiento.
Aquí está mi archivo de manifiesto:
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Probé esto en Windows Server 2008, pero el archivo de manifiesto parece ignorarse y el ejecutable se inicia sin suficientes derechos.
Solución 3
Ok, funciona cuando incrusto el archivo de manifiesto usando MT.EXE. Todavía no sé por qué no funciona cuando proporciono el manifiesto como un archivo separado, pero supongo que incrustar es una solución lo suficientemente buena.
Otros consejos
http: / /blogs.msdn.com/junfeng/archive/2009/05/11/internal-manifest-vs-external-manifest.aspx
citado desde el enlace de arriba: En Windows XP, Sxs busca el manifiesto externo antes del manifiesto interno. Si se encuentra un manifiesto externo, se ignora el manifiesto interno.
En Windows Server 2003 y versiones posteriores, el orden se invierte. Se prefiere el manifiesto interno sobre el manifiesto externo.
Si usa un manifiesto externo y su escenario funciona en Windows XP, pero no en Windows Server 2003 y versiones posteriores, verifique que el ejecutable no tenga un manifiesto interno
Esto lo volverá loco - llegó al final y publicó un artículo y algunas utilidades para ayudarlo a ignorar su manifiesto: Descubra por qué se ignora su manifiesto externo .