¿Cómo puedo crear un nuevo proceso con otra cuenta de usuario en Windows?
Pregunta
¿Es posible crear un nuevo proceso en Windows con una cuenta de usuario diferente? Sé que hay un menú contextual "Ejecutar como" pero quiero hacerlo desde Java. Tengo el nombre de usuario y la contraseña.
Solución
Usted tiene que escribir un archivo DLL mediante el Java Native Interface (JNI) como no se puede hacer esto con el código Java puro.
El DLL propio tiene que llamar a la CreateProcessAsUser función para crear un proceso en el contexto de otro usuario. Para crear con éxito este proceso es necesario proporcionar un token de acceso a la función, la cual fue a su vez crea llamando a la función LogonUser (que toma el nombre de usuario y contraseña para Authentify que otro usuario).
Otros consejos
Hay un programa llamado "runas.exe." Usted podría funcionar ese proceso y suministrar los argumentos adecuados para su proceso y nombre de usuario / contraseña. Creo que es el método más simple.
Yo sólo encontré con una alternativa a los programas llamados runas.exe MiniRunAs que tendrá la contraseña en la línea de comandos - http://www.source-code.biz/snippets/c/1.htm
Si usted es capaz de instalarlo junto con su solicitud, que puede resultar más sencillo que escribir un archivo DLL JNI.
En función de sus necesidades el Win32 API " CreateProcessWithLogonW " es más fácil de usar que las "funciones CreateProcessAsUser / LogonUser".
A partir de MSDN Docs:
The CreateProcessWithLogonW and CreateProcessWithTokenW functions are similar to the CreateProcessAsUser function, except that the caller does not need to call the LogonUser function to authenticate the user and get a token
RUNAS tiene el "/ savecred" que le permiten entrar en la credencial sólo la primera vez. Un problema potencial es que cuando / savecred guarda las credenciales que lo guarda para cuando RUNAS invoca esa cuenta de usuario. Esto puede ser un gran riesgo para la seguridad así que ten cuidado de usarlo!
Ejemplo en http://www.rgagnon.com/javadetails/java-0014 .html (al final)