Como posso criar um novo processo com outra conta de usuário no Windows?
Pergunta
É possível criar um novo processo no Windows com uma conta de usuário diferente? Eu sei que há um menu de contexto "Executar como" mas eu quero fazê-lo de Java. Eu tenho o nome de usuário ea senha.
Solução
Você precisa escrever uma DLL usando o Java Native Interface (JNI), como você não pode fazer isso com o código Java puro.
O DLL em si precisa chamar o CreateProcessAsUser função para criar um processo no contexto de outro usuário. Para criar com êxito esse processo, você precisa fornecer um token de acesso para a função, que era em si criado chamando o função LogonUser (que leva o nome de usuário e senha para Authentify que outro usuário).
Outras dicas
Existe um programa chamado "runas.exe." Você pode executar esse processo e fornecer os argumentos apropriados para o seu processo e nome de usuário / senha. Eu acho que é o método mais simples.
Eu só corri em toda uma alternativa para o programa runas.exe chamados MiniRunAs que terá a senha na linha de comando - http://www.source-code.biz/snippets/c/1.htm
Se você é capaz de instalá-lo junto com seu aplicativo, que pode revelar-se mais simples do que escrever um DLL JNI.
Dependendo de suas necessidades a API Win32 " CreateProcessWithLogonW " é mais fácil de usar do que as "funções CreateProcessAsUser / LogonUser".
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 tem o "/ savecred" interruptor que permite que você insira a credencial somente na primeira vez. Um problema potencial é que quando / savecred salva as credenciais que poupa-lo para sempre RUNAS invoca essa conta de usuário. Isso pode ser um enorme risco de segurança que deve ter cuidado de usá-lo!
Exemplo em http://www.rgagnon.com/javadetails/java-0014 .html (no final)