start open net from example ejemplos application c# .net process permissions

open - system.diagnostics c#



Iniciar un proceso en C#con nombre de usuario y contraseña arroja la excepción "Acceso denegado" (6)

Me encontré con el mismo problema que tuviste en un proyecto. Debe haber una forma de generar un proceso de su aplicación web con las credenciales dadas, pero en la práctica, es un desafío en el mejor de los casos. Lo que finalmente terminé haciendo fue tener la información de inserción de la aplicación en un MSMQ y tener un servicio de Windows que sacaba elementos de la Cola y atendía las solicitudes.

Incluso cuando su aplicación se hace pasar por otra persona, aún desea ejecutarse bajo la cuenta de usuario de aspnet.

Dentro de una aplicación web .NET 3.5 ejecutando suplantación Estoy tratando de ejecutar un proceso a través de:

var process = new Process { StartInfo = { CreateNoWindow = true, FileName = "someFileName", Domain = "someDomain", Username = "someUserName", Password = securePassword, UseShellExecute = false } }; process.Start();

-Cambiar el modo de confianza a completo en web.config no solucionó.

-Nota la var securePassword es una secureString configurada anteriormente en el código.

Esto arroja una excepción con ''Acceso denegado'' como su mensaje. Si elimino la información de nombre de usuario y contraseña, la excepción desaparece, pero el proceso comienza como aspnet_wp en lugar del usuario que lo necesito.

He visto este problema en varios foros y nunca he visto una solución. ¿Algunas ideas?


Puede usar ProcessStartInfo que le permite especificar credenciales. El truco es que la contraseña es una cadena segura, por lo que debe pasarla como una matriz de bytes.

El código podría ser algo así como:

Dim startInfo As New ProcessStartInfo(programName) With startInfo .Domain = "test.local" .WorkingDirectory = My.Application.Info.DirectoryPath .UserName = "testuser" Dim pwd As New Security.SecureString For Each c As Char In "password" pwd.AppendChar(c) Next .Password = pwd ''If you provide a value for the Password property, the UseShellExecute property must be false, or an InvalidOperationException will be thrown when the Process..::.Start(ProcessStartInfo) method is called. .UseShellExecute = False .WindowStyle = ProcessWindowStyle.Hidden End With


Quería mencionar que probé el código en este sitio, incluido el código actualizado mencionado en los comentarios. Este código ejecuta el proceso como la identidad suplantada (que en realidad es todo lo que necesito), pero el redireccionamiento del error estándar falla, por lo que este enlace podría ser útil para aquellos que no están interesados ​​en tratar con el stderr.


Verifique el nivel de seguridad de acceso del código ya que el proceso requiere Full Trust . Su aplicación web puede estar ejecutándose en una configuración de confianza parcial.

Desde la página de Process MSDN:

Permisos

* LinkDemand
para la plena confianza de la persona que llama de inmediato. Esta clase no puede ser utilizada por un código parcialmente confiable.

* Demanda de herencia
para la plena confianza de los herederos. Esta clase no puede ser heredada por un código parcialmente confiable.


No estoy seguro de si esto es así, pero tenía un problema relacionado y la respuesta fue que la cuenta no tenía permiso para suplantar en la máquina. Esto se puede cambiar agregando la cuenta a la Política "Suplantar a un cliente después de la autenticación" usando el administrador de políticas local en la máquina.


Fui de una manera diferente y puse toda la aplicación en su propio grupo de aplicaciones ejecutándose como el usuario al que originalmente personificamos. Ahora, cuando asp.net genera un nuevo proceso, se genera bajo el contexto del usuario en lugar de aspnet_wp. No es la solución exacta al problema que publiqué, pero funcionó para nuestra situación.