Cómo configurar" Ejecutar este programa como administrador " mediante programación


Estoy teniendo un problema con el buen bdeadmin.exe en Vista. Primero, quitemos las respuestas predecibles del camino:

"No debe requerir que su solicitud sea elevada."
Este sí. C'est la vie.

"Necesita incrustar un archivo de manifiesto."
Ya está compilado, tiene muchos años, la empresa que lo creó no tiene intención de volver a hacerlo, y se instala desde un módulo Merge (archivo MSM).

" El BDE está obsoleto, deberías usar dbExpress "
Un millón y medio de líneas de código. 'Nuff dijo.

"Suelta un archivo de manifiesto junto al EXE."
Lo intenté, no hice nada. Como prueba, ese mismo archivo de manifiesto fue capaz de hacer que varios otros archivos EXE requieran elevación, pero no el que quería. Algo allí está impidiendo que el manifiesto externo sea leído.

"Crea un atajo y establece SLDF_RUNAS_USER."
No puedo hacer eso, es un applet de Panel de control.

Lo único que funcionó fue configurar "Ejecutar este programa como administrador" en la pestaña Compatibilidad de su ventana de Propiedades. No debería tener que decirle a los usuarios que hagan esto. Malo para el negocio. Necesito que el instalador haga esto. El archivo MSM utiliza una ruta estática.

Author: Cœur, 2010-02-22

7 answers

Puede configurar programáticamente el indicador "Ejecutar este programa como administrador" (la opción que encuentra en la pestaña Compatibilidad de las propiedades de un EXE), estableciendo una simple clave de registro. Necesita crear un valor de cadena (REG_SZ) bajo una de estas claves (si desea que la configuración sea por usuario o por máquina, respectivamente):

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT\CurrentVersion \ AppCompatFlags \ Layers

O

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \ Windows NT\CurrentVersion \ AppCompatFlags \ Layers

El nombre del valor debe ser la ruta completa a su ejecutable (si la ruta contiene espacios, no rodee la ruta con comillas) y los datos del valor deben contener la cadena RUNASADMIN.

Para la muestra:

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "PUT__VALUE__HERE"

Modos De Compatibilidad

WIN95 Windows 95
WIN98 Windows 98
WIN4SP5 Windows NT 4.0 SP5
WIN2000 Windows 2000
WINXPSP2 Windows XP SP2
WINXPSP3 Windows XP SP3
VISTARTM Vista
VISTASP1 Vista SP1
VISTASP2 Vista SP2
WIN7RTM Windows 7
WINSRV03SP1 Windows Server 2003 SP1
WINSRV08SP1 Windows Server 2008 SP1

Nivel de privilegios

RUNASADMIN Ejecuta el programa como administrador

REG ADD "HKLM\SOFTWARE\Microsoft \ Windows NT\CurrentVersion \ AppCompatFlags \ Layers " / v "C:\temp\compatmodel\iconsext.exe "/ t REG_SZ / d " WINXPSP3 RUNASADMIN" / f

Referencias: http://www.verboon.info/2011/03/running-an-application-as-administrator-or-in-compatibility-mode/

 35
Author: Allon Guralnek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-28 16:41:45

Esta es una posibilidad remota, pero si tiene la palabra "setup" o "install" en el nombre del EXE, Windows le pedirá elevación cuando lo ejecute. Aunque no se si eso funcionará con un applet de panel de control.

 6
Author: Allon Guralnek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-29 14:17:15

¿Ha probado Microsoft Application Compatibility Toolkit? Analiza tu aplicación y proporciona shims de compatibilidad que podrían ayudarte a resolver tu problema.

 1
Author: Aaron Klotz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-22 19:01:49

Use un programa wrap que use ShellExcute que use "runas" como su "verbo" para ejecutar el programa que desea.

 1
Author: Barrypp.zzx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-03 14:41:11

He encontrado que el método de archivo .manifest no funciona si el .exe está bajo C:\Program files\... y el .exe se ha ejecutado previamente sin el archivo .manifest. Windows recuerda el .manifest desde la primera vez que se ejecuta el .exe. Esto significa que no puede enviar el manifiesto cuando los usuarios se quejan de que sus instalaciones no se ejecutan. El archivo de manifiesto tiene que ser colocado antes o durante la misma instalación que coloca el .exe.

Windows vuelve a comprobar el .manifest si el .exe cambia (por ejemplo, nueva versión o diferente número de bytes)

 1
Author: Wolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 08:42:44

Empaqueta tu aplicación en WinRAR SFX con modo silencioso + modo de solicitud de administrador.

Mucho más simple que jugar con .Variables MSI.

 0
Author: Benji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-06 01:51:13

Me sorprendería que esto fuera posible. Sería una forma ideal para que el código malicioso abusara del sistema. Probablemente tendrá que decirle al usuario que el administrador debe instalar o que debe tener derechos de administrador (como todos los demás programas en Windows).

 -1
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-22 18:23:05