Передача пароля с помощью компоновщика процессов, не работающего для команды "net use"
Я пытаюсь запустить команду "net use", вызвав ее с помощью компоновщика процессов. Когда я передаю пароль в OutputStream с помощью PrintWriter, происходит сбой со следующей ошибкой: Произошла системная ошибка 1219. Несколько подключений к серверу или общему ресурсу одним и тем же пользователем, используя более одного имени пользователя, не допускаются. Отключите все предыдущие подключения к серверу или общему ресурсу и повторите попытку.
Я проверил имя пользователя, пароль и команду, запустив ее вручную. Работает нормально
Фрагмент кода:
ProcessBuilder pb = new ProcessBuilder("net","use","\\\\<SERVERNAME>\\<SharedLocation>","/USER:<username>","*");
Process p = pb.start();
OutputStream out = p.getOutputStream();
PrintWriter writer = new PrintWriter(out);
writer.println("<pwd>".toCharArray());
int exitCode = p.waitFor();
System.out.println("Exit Code :"+ exitCode);
2 ответа
Пара предложений:
- Бежать
net use * /delete /y
в качестве первого шага, чтобы удалить все соединения, прежде чем начать. Вы также можете попробовать удалить определенные соединения. - Используйте чистое решение Java вместо
net use
- см. /questions/29366753/kak-ya-mogu-smontirovat-disk-windows-v-java/29366757#29366757
Я буквально только что зарегистрировался на stackoverflow, потому что у меня была точно такая же проблема, и я решил ее, потратив часы и часы проб и ошибок.
Решением для меня было добавление "\" (соответственно "\\" в Java-коде) прямо перед именем пользователя.
Вот что сработало для меня:
String[] cmdCommand = new String[]{"net", "use", "\\\\" + pcSystem.getIpAddress() + "\\c$", "/user:\\" + pcSystem.getUsername(), pcSystem.getPassword()};
Process proc = new ProcessBuilder(cmdCommand).start();