Actualmente estoy usando un método local para ejecutar un proceso como un usuario diferente en Vista, y no puedo evitar la sensación de que es un hack-ish y menos que ideal (además del hecho de que craps UAC, bloqueando mi aplicación con una excepción de seguridad y forzándome a desactivar el UAC por completo). Mi proceso consta de dos proyectos (por lo que dos archivos EXE) - una "interfaz" y un "talón de lanzamiento" - y aquí está el proceso:Ejecutar nuevo proceso como usuario diferente en vb.net
- usuario tiene un acceso directo que pone en marcha "Interface.exe notepad.exe"
- Interface.exe tiene una forma que solicita las credenciales que les gustaría usar
- Interace.exe utiliza ProcessStartInfo para crear una instancia de LaunchStub.exe (LS) como el nuevo usuario
- LS utiliza ProcessStartInfo (con ShellExecute establecido en verdadero) para iniciar el archivo solicitado, y dado que ya se está ejecutando como el usuario solicitado, también lo es el nuevo proceso.
La razón por la que tengo un proceso de dos pasos es que deseo que los usuarios puedan hacer clic derecho en cualquier archivo que el sistema operativo tenga una acción predeterminada para (.EXE, .SQL, .MSC, etc.) y inicie, y ProcessStartInfo solo lo admite con "UseShellExecute" habilitado, pero ese cambio me impide usar nuevas credenciales, por lo que solo puedo hacerlo de a una por vez.
Esto causa algunos problemas: primero, el usuario ya debe existir en la computadora, lo que significa que debe haber iniciado sesión localmente anteriormente. Si no hay un perfil local para ese usuario, la aplicación solicitada a veces se iniciará, pero obtengo excepciones de registro y perfil porque la aplicación espera que existan cosas que todavía no (como una sección de HKCU en el registro, que el usuario no usa). tener porque nunca han iniciado sesión).
Sé que debería ser capaz de simplemente "Elevar" los derechos de mi aplicación para el usuario que están solicitando, iniciar mi nuevo proceso, y luego deshacer la elevación, pero no puedo encontrar una buena muestra de código por eso, y no estoy seguro de que permita correr como un usuario completamente diferente. ¿Tiene sentido? Simplemente no puedo evitar sentir que hay una mejor manera de hacer esto.
ACTUALIZACIÓN: Sólo traté some Impersonation code he encontrado en Internet, pero en vano. Cuando se usa junto con ProcessStartInfo, todavía parece iniciar procesos usando mi inicio de sesión actual, no el que he proporcionado, aunque he activado la suplantación utilizando las credenciales proporcionadas.
Voy a intentarlo y ver qué pasa. Si puedo hacerlo sin tener que usar un segundo EXE como un stub, estaré contento, y aún más si no funciona cuando UAC está habilitado (me ocuparé de un aviso). Seré bakc después de que lo haya intentado. – SqlRyan
@SqlRyan y funcionó con UAC habilitado ?? – Jet