2010-07-21 51 views
5

¿Cómo se ejecuta otro .exe desde VB.NET pero como otro usuario?¿Cómo se ejecuta otro .exe de VB.NET como otro usuario?

Espero lanzar un .exe como "Clic izquierdo -> Ejecutar como -> Ingresar usuario/Pase -> Hacer clic en Aceptar" Si hago eso, mi aplicación se ejecuta como se esperaba (Necesito ejecutarla como otro usuario para obtener acceso a algunas carpetas en la red)

pero si uso esto en VB.NET System.Diagnostics.Process.Start(System.Windows.Forms.Application.ExecutablePath, PARAMETER, USER, PASSWORD, DOMAIN)

la aplicación se ejecuta con el otro usuario .. pero Excel (dentro de mi aplicación con la interoperabilidad) no se abre el archivo en la carpeta restringida.

(corro de nuevo la misma aplicación pero con un usuario diferente, sólo para evitar la creación de archivos .exe más ... pero yo ya probé con VBScript)

Una vez más, Process.Start no se abre Excel utilizando el otro usuario ... pero clic izquierdo -> ejecutar como succes en eso ... ¿por qué? ¿¿de otra manera??

esto es lo que hace la aplicación:

  1. Abra la aplicación
  2. cheque si hay un parámetro
  3. si ningún parámetro, relanzar la aplicación con el otro usuario y enviar algún parámetro
  4. si hay un parámetro abierto excel
  5. abra un archivo xlsx

pero si hago doble clic ... Excel abre ... usa 50% de CPU, y me da el error de que no puede abrir el archivo ...

si lo ejecuto directamente con el usuario deseado y pase ... todo se ejecuta bien ¿Alguna sugerencia sobre cómo solucionar esto? (suplantar funciona bien ... pero abre Excel con el usuario real ... no el que tiene derechos)

¡Gracias!

Respuesta

0

Esto es realmente interesante. De forma predeterminada, creo que los componentes COM de Excel están configurados para ejecutarse como Interactive User (es decir, el usuario inició sesión en el cuadro). Si son configured to run como Launching User, la suplantación debería funcionar. Por supuesto, esto no explica por qué funciona "Run As ..." (no conozco la mecánica de eso, así que tal vez no sea una personificación).

Una idea es reestructurar la aplicación para copiar los archivos a una ubicación a la que Excel pueda acceder, manipularlos y luego copiar la parte posterior.

+0

lo siento ... Abandoné el proyecto: P pero creo que esta hubiera sido la solución – figus

1

Si se obtiene "identificador no es válido" error, debe intentar algo como esto:

dim info As New ProcessStartInfo("...") 

info.UseShellExecute = False 

info.RedirectStandardInput = True //This is the key 

info.RedirectStandardError = True //This is the key 

info.RedirectStandardOutput = True //This is the key 

info.UserName = "username" 

info.Password = "password" 

Using (install As Process = Process.Start(info)) 


     Dim output As String = install.StandardOutput.ReadToEnd() 

     install.WaitForExit() 


End Using 

Especificación de cualquiera de RedirectStandardOutput = true, RedirectStandardError = true, o RedirectStandardInput = true hace que el proceso ser lanzado con STARTF_USESTDHANDLES. Si su proceso no tiene ninguno de estos identificadores, CreateProcessWithLogon fallará con "Handle inválido".

DEBE redirigirlo (incluso si no tiene la intención de escribirle nada).

Saludos

Cuestiones relacionadas