Можно ли создать новый процесс в Windows с другой учетной записью пользователя? Я знаю, что есть контекстное меню «Запуск от имени», но я хочу сделать это из Java. У меня есть имя пользователя и пароль.
Вам нужно написать DLL, используя собственный интерфейс Java (JNI) , поскольку вы не можете сделать это с помощью чистого кода Java.
Сама DLL должна вызывать функцию CreateProcessAsUser , чтобы создать процесс в контексте другого пользователя. Чтобы успешно создать этот процесс, вам нужно предоставить токен доступа к функции, которая сама была создана путем вызова функции LogonUser (для аутентификации этого другого пользователя требуются имя пользователя и пароль).
Существует программа под названием "runas.exe". Вы можете запустить этот процесс и предоставить соответствующие аргументы для вашего процесса и имя пользователя / пароль. Я думаю, что это самый простой способ.
Я только что наткнулся на альтернативу программе runas.exe под названием MiniRunAs, которая примет пароль в командной строке - http://www.source -code.biz / snippets / c / 1.htm
Если вы можете установить его вместе с вашим приложением, это может оказаться проще, чем написание JNI DLL.
В зависимости от ваших потребностей Win32 API « CreateProcessWithLogonW » проще в использовании, чем функции «CreateProcessAsUser / LogonUser».
Из документов MSDN:
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 имеет переключатель "/ savecred", который позволяет вводить учетные данные только в первый раз. Одна потенциальная проблема заключается в том, что когда / SaveCred сохраняет учетные данные, он сохраняет их при каждом запуске RUNAS этой учетной записи пользователя. Это может быть огромным риском для безопасности, поэтому будьте осторожны при его использовании!
Пример на http://www.rgagnon.com/javadetails/java-0014.html (в конце)