Tengo una aplicación con un manifiesto que requiere ejecutarse como administrador, pero parte de la aplicación es asignar una unidad usando WNetAddConnection2 que creo que requiere que se ejecute en el contexto normal de usuario debido a credenciales ¿Hay alguna forma de ejecutar este código en el contexto normal del usuario sin crear un proceso separado?Ejecutar código en contexto de otros usuarios
EDITAR
A partir de los comentarios que he llegado hasta aquí, pero no funciona. Esperaba que no, ya que no entiendo muy bien cómo debería usar esto. ¿Quizás sea mejor si abro una nueva pregunta?
class Program
{
[DllImport("advapi32.DLL")]
public static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
[DllImport("advapi32.DLL")]
public static extern bool RevertToSelf();
static void Main(string[] args)
{
IntPtr phToken = IntPtr.Zero;
ImpersonateLoggedOnUser(phToken);
MapDrives();
RevertToSelf();
}
}
EDITAR
Si el usuario actual tiene privilegios de administrador, entonces el proceso principal está elevada con el manifiesto, en el código que se eleva Quiero ejecutar un comando en los usuarios no elevado espacio ya que parece tener diferentes variables de entorno, etc. Creo que una vez que se inicia un hilo, no puede cambiar, necesita ejecutar uno nuevo.
La manera de obtener el token de autenticación de usuario actual es a través de WindowsIdentity.GetCurrent(). Token. Sin embargo, creo que en su caso devolverá el token del usuario administrador (ya que su aplicación se está ejecutando como administrador). –
Esto es suplantación. Un muy útil [paquete nuget] (https://www.nuget.org/packages/SimpleImpersonation/2.0.0) y [la publicación relacionada] (https://stackoverflow.com/a/7250145/465053) para lograr el mismo a través de 'LogonUser()' p/invocar llamada. – RBT