Или вы можете использовать ProcessBuilder ... но ему понадобится путь к фактическому rundll32.
Я сделал это, пытаясь отсортировать странную ошибку в моем маленьком приложении «Иерархическая отправка».
(Я ненавижу, что Windows после «XP» «сглаживает», ссылки в опции «Отправить» на тупой список; как дерево я мог бы лучше ориентироваться в сорока с лишним маленьких опциях, которые я использую моя система)
Вот код действия, вызывающего ссылку (или файл любого типа):
ArrayList<String> app = new ArrayList<>();
app.add("C:\\Windows\\System32\\rundll32.exe");
app.add("SHELL32.DLL,ShellExec_RunDLL");
app.add(file.getAbsolutePath());
// Args are passed by windows when it launches the "More Sends" jar
for (int i = 0; args != null && i < args.length; i++) {
app.add(args[i]);
}
ProcessBuilder b = new ProcessBuilder(app);
// The logger thread hangs till the called process does not die... not ideal
// log(
b.start()
// )
;
Тем не менее, весь процесс вызова Windows .lnk через Java может дать довольно запутанные результаты.
Прямая ссылка на x.jar может открыть jar с системой Java VM, но прямая ссылка на установленный jre / bin / javaw.exe -jar «x.jar» может завершиться ошибкой, а «Windows не может найдите файл "сообщение.
Это, в то время как другой сосуд, названный точно таким же образом, будет работать безупречно.
Хотя мне, возможно, придется взглянуть на альтернативные потоки .lnk, так как некоторые из них являются копиями с моего старого ПК ...