¿Qué sucede cuando ejecuto un programa como administrador?

¿Qué sucede cuando ejecuto un programa como administrador?

Estoy intentando ejecutar un exe de Win7 que está en un recurso compartido de red (un servidor CIFS de Linux). El recurso compartido fue creado por alguien que no es administrador (consulteProblema de Windows 7 para acceder a la carpeta compartida). Puedo leer, editar y escribir archivos en la carpeta que contiene el exe. Puedo leer (es decir, copiar) el exe.

Pero cuando intentocorrerel exe, ya sea haciendo doble clic y aceptando el cuadro de diálogo UAC, o haciendo clic derecho en "Ejecutar como administrador", obtengo:

Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.

¿Debo copiar el exe al disco local antes de poder ejecutarlo?

Seguí la receta en (respuesta aún no aceptada para)¿Cómo puedo ejecutar un EXE desde un recurso compartido de red?, pero eso parece otorgar solo permisos de lectura, no permisos exe.

(Parientes lejanos:No se puede ejecutar .exe desde la unidad de red.)

Respuesta1

Este es un comportamiento esperado (aunque inusual).

Cuando ejecuta un programa desde un recurso compartido de red, puede hacerlo de varias maneras.

  1. El recurso compartido está asignado a una unidad de red: por ejemplo g:->\\server\share
  2. El recurso compartido accede directamente al recurso compartido:\\server\share

El primero ya puede causar un problema cuando ejecutas un programa como Administrador y te lo explicaré a continuación.

¿Qué sucede cuando ejecuto un programa como administrador?

Cuando ejecuta un programa como administrador, se crea un nuevo entorno y se carga el perfil de Administrador. Aunque utilizará los derechos que tiene su usuario, obviamente tiene derechos adicionales para el usuario administrador. Como consecuencia, no se crea ninguna asignación a una unidad de red y, por lo tanto, su usuario Administrador no tiene ninguna asignación de red adicional presente en su perfil, por lo que g: no existe.

Incluso es posible que si la configuración de seguridad del recurso compartido es muy estricta, el usuario administrador tampoco tenga permiso.

¿Cómo solucionar y superar el problema?

Obviamente, puede copiar el archivo localmente y ejecutarlo luego, pero supongamos que no desea hacer esto.

Primero puede iniciar un símbolo del sistema como administrador. Desde allí ingrese el siguiente comando:

net use g: \\server\share

Reemplace la unidad y compártala para que coincida con su recurso compartido existente.

Mientras esta ventana del símbolo del sistema esté abierta, puede ejecutar su ejecutable como administrador y funcionará garantizado.

Si su usuario no tiene derechos sobre \\server\share, net use fallará con un error que le indicará exactamente esto, para que sepa dónde está el problema.

Si los derechos son buenos, también puede acceder al ejecutable accediendo \\server\sharey ejecutándolo como administrador. Esto elimina el requisito de tener primero un recurso compartido de red en un entorno diferente.

Respuesta2

Debe establecer el valor EnableLinkedConnections en 1 como se describe en este artículo de KB:

Las unidades asignadas no están disponibles desde un mensaje elevado cuando UAC está configurado para "Solicitar credenciales" en Windows
https://support.microsoft.com/en-us/kb/3035277

  1. En el Editor del Registro, busque y luego haga clic en la siguiente subclave del Registro:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

  2. En el panel derecho, haga clic con el botón derecho en Nuevo y luego haga clic en Valor DWORD (32 bits).

  3. Nombra la nueva entrada del registro como EnableLinkedConnections.
  4. Haga doble clic en la EnableLinkedConnectionsentrada del registro.
  5. En el cuadro de diálogo Editar valor DWORD, escriba 1 en el campo Información del valor y luego haga clic en Aceptar.
  6. Salga del Editor del Registro y luego reinicie la computadora.

Respuesta3

Algunos instaladores deben ser accesibles mediante NT AUTHORITY\SYSTEM, pero las unidades de red son específicas del usuario. EnableLinkedConnectionsNo ayudará en este caso.

Elimine su unidad de red existente y asígnela nuevamente a nivel del sistema. Para hacerlo, cree una tarea programada con acción: net.exey argumentos: use z: \\host\share\(proporcione la contraseña, si es necesario) y cambie la cuenta para ejecutar esta tarea a NT AUTHORITY\SYSTEM. /PERSISTENT:yesno parece funcionar, por lo que deberás programarlo para que se ejecute al arrancar

Después de ejecutarlo, todo el sistema verá la unidad de red. En el explorador de Windows se mostrará como desconectado, pero funcionará de todos modos.

información relacionada