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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top