Cuando se inician, muchos programas requieren la elevación de permisos (escudo en el icono de la aplicación), pero en realidad no necesitan los privilegios de administrador para su funcionamiento normal. Por ejemplo, puede otorgar permisos manualmente a sus usuarios en la carpeta de la aplicación en el Archivos de programa y / o claves de registro utilizadas por el programa. Por lo tanto, al iniciar un programa de este tipo con una cuenta de usuario no administrador, aparecerá un mensaje de UAC y se le pedirá al usuario que ingrese una contraseña de administrador (si el Control de cuentas de usuario está habilitado en la computadora). Para evitar este mecanismo, muchos usuarios simplemente deshabilitan UAC u otorgan privilegios de administrador a un usuario agregando una cuenta de usuario al grupo local «Administradores». Por supuesto, ambos métodos no son seguros.
¿Por qué algunas aplicaciones de Windows no se ejecutan con usuarios estándar y requieren permisos de administrador?
Una aplicación puede necesitar privilegios de administrador para modificar algunos archivos (registros, configuraciones, etc.) en su propia carpeta en C: Archivos de programa (x86) SomeApp. De forma predeterminada, los usuarios no tienen permisos de edición (escritura y modificación) en este directorio. Para que este programa funcione normalmente, se requieren permisos de administrador. Para resolver este problema, debe otorgar manualmente la modificar y / o escribir permiso para un usuario (o el grupo de usuarios integrado) en la carpeta de la aplicación en el nivel del sistema de archivos NTFS.
Nota. En realidad, no se recomienda almacenar los datos cambiantes de la aplicación en su propia carpeta en C: Archivos de programa. Es mejor almacenar los datos de la aplicación en el perfil de usuario. Pero es una cuestión de pereza e incompetencia de los desarrolladores de aplicaciones.
¿Cómo ejecutar un programa que requiere privilegios de administrador con un usuario estándar?
Anteriormente describimos cómo deshabilitar un mensaje de UAC para una aplicación determinada usando RunAsInvoker parámetro. Sin embargo, este método no es lo suficientemente flexible.
También puede usar RunAs con la contraseña de administrador guardada (en el Administrador de credenciales de Windows) usando el /SAVECRED
opción. También es inseguro porque el usuario puede usar la contraseña de credenciales de administrador guardada para ejecutar cualquier programa en esta computadora.
Consideremos una forma más fácil de forzar la ejecución de cualquier programa sin privilegios de administrador (sin ingresar la contraseña de administrador) y con UAC habilitado (Nivel 4, 3 o 2 del control deslizante de UAC).
Tomemos el Editor del registro como ejemplo: regedit.exe (se encuentra en la carpeta C: Windows ). Observe el escudo UAC junto al icono de la aplicación. Este icono significa que se solicitará la elevación de privilegios a través de UAC para ejecutar este programa.
Si tu corres regedit.exe
, verá una ventana de Control de cuentas de usuario solicitando las credenciales de administrador (Do you want to allow this app to make changes to your device?
). Si no proporciona una contraseña y no confirma la elevación, la aplicación no se iniciará.
Intentemos omitir la solicitud de UAC para este programa. Crea el archivo de texto ejecutar como no admin.bat que contiene el siguiente código en su escritorio:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Para forzar la ejecución de regedit.exe sin los privilegios de administrador y para suprimir el indicador de UAC, simplemente arrastre el archivo EXE que desea iniciar a este archivo BAT en el escritorio.
Luego, el Editor del registro debería iniciarse sin un mensaje de UAC y sin ingresar una contraseña de administrador. Si abre el Administrador de tareas y agrega el Elevado columna, verá que existe el proceso regedit.exe sin el estado elevado (ejecutar con permisos de usuario no administrador).
Intente editar cualquier parámetro en el subárbol de registro HKEY_LOCAL_MACHINE. Como puede ver, un usuario no puede editar el elemento en esta clave de registro (el usuario no tiene permisos de escritura en las claves de registro del sistema). Pero puede agregar o editar claves de registro y parámetros en su sección de usuarios: HKEY_CURRENT_USER.
De la misma manera, puede ejecutar cualquier aplicación utilizando el archivo BAT. Simplemente especifique la ruta al archivo ejecutable.
ejecutar-aplicación-como-no-admin.bat
Set ApplicationPath="C:Program FilesSomeApptestapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
También puede agregar un menú contextual que permite ejecutar todas las aplicaciones sin elevación. Para hacerlo, cree el archivo RunAsUser.REG, copie el siguiente código en él, guárdelo e impórtelo al registro de Windows haciendo doble clic en el archivo reg (necesitará permisos de administrador para aplicar este cambio).
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shellforcerunasinvoker] @="Run as user without UAC privilege elevation" [HKEY_CLASSES_ROOT*shellforcerunasinvokercommand] @="cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" "%1"""
Después de eso, para ejecutar cualquier aplicación sin los privilegios de administrador, simplemente seleccione «Ejecutar como usuario sin elevación de privilegios de UAC”En el menú contextual del Explorador de archivos.
Permítame recordarle una vez más que usar el programa en el modo RUNASINVOKER no le permitirá elevar el programa. RunAsInvoker suprime el indicador de UAC y le dice al programa que debe ejecutarse con los permisos del usuario actual y no solicitar la elevación de privilegios. Si un programa realmente necesita privilegios elevados para editar la configuración del sistema o los archivos, no funcionará o volverá a solicitar permisos de administrador.
¿Cómo omitir UAC con RunAsInvoker en __COMPAT_LAYER?
La variable de entorno __COMPAT_LAYER le permite establecer diferentes niveles de compatibilidad para las aplicaciones (el Compatibilidad pestaña en las propiedades de un archivo EXE). Con esta variable, puede especificar la configuración de compatibilidad que se utilizará al iniciar un programa. Por ejemplo, para iniciar una aplicación en modo de compatibilidad con Windows 8 y resolución de 640 × 480, configure lo siguiente:
set __COMPAT_LAYER=Win8RTM 640x480
La variable __COMPAT_LAYER tiene algunas opciones que nos interesan. Existen los siguientes parámetros:
- RunAsInvoker – ejecutar una aplicación con los privilegios de un proceso principal sin el indicador de UAC;
- RunAsHighest – ejecutar un programa con el permiso de más alto nivel disponible para el usuario (aparecerá el mensaje de UAC si un usuario tiene privilegios de administrador);
- RunAsAdmin – ejecutar una aplicación como administrador (el mensaje de UAC aparece cada vez).
Significa que el parámetro RunAsInvoker no proporciona los permisos de administrador, sino que solo suprime el indicador de UAC.
El siguiente código CMD habilita el modo RunAsInvoker para el proceso actual y ejecuta el programa especificado sin elevación:
set __COMPAT_LAYER=RUNASINVOKER
start "" "C:Program FilesMyApptestapp.exe"
Habilite el modo RunAsInvoker en el manifiesto de archivo EXE
Como dijimos anteriormente, Windows 10 muestra un icono de escudo UAC para los programas que requieren elevación para ejecutarse. Los desarrolladores establecen este requisito al compilar la aplicación en el programa manifiesto .
Puede editar el manifiesto de cualquier archivo exe y deshabilitar el requisito de ejecutar el programa en modo elevado.
Para editar el manifiesto del programa, puede utilizar el gratuito Hacker de recursos herramienta. Abra el archivo ejecutable de la aplicación en Resource Hacker.
En el árbol de la izquierda, vaya a la sección Manifiesto y abra el manifiesto del programa. Preste atención a la siguiente sección xml:
<requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges>
Es gracias a la requireAdministrator opción que Windows siempre intenta ejecutar este programa como administrador.
Cambiar requireAdministrator a asInvoker y guardar los cambios en el archivo exe.
Tenga en cuenta que ahora el escudo UAC ha desaparecido del icono del programa y puede ejecutarlo sin pedir la contraseña de administrador con los permisos de usuario actuales.
En este caso, puede obligar al programa a utilizar un archivo de manifiesto externo. Crea un archivo de texto sin formato appname.exe.manifest (por ejemplo, Autologon.exe.manifest
) en el directorio con el archivo exe y copie el código de manifiesto de Resource Hacker en él. Cambiar requireAdministrator a asInvoker. Guarde el archivo de manifiesto.
Para que Windows siempre intente utilizar el archivo de manifiesto externo al iniciar archivos exe, habilite un parámetro de registro especial:
REG ADD "HKLMSOFTWAREMicrosoftWindowsCurrentVersionSideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f
Reinicie Windows y asegúrese de que el programa esté utilizando un archivo de manifiesto externo que indique que se ejecute sin privilegios de administrador.
Artículos Interesantes
Contenido