выполнить файл .lnk в Java - PullRequest
       25

выполнить файл .lnk в Java

1 голос
/ 20 января 2011

Мне нужно выполнить файл .lnk в Java (файл lnk, который указывает на исполняемый файл).Как я могу сделать?

в VB. NET я делаю

Process.Start(path)

и это работает

спасибо вам за помощь.

Ответы [ 4 ]

6 голосов
/ 20 января 2011

Использование ProcessBuilder :

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "C:\\temp\\file.lnk");
Process process = pb.start();

Вызовите process.getInputStream() и process.getErrorStream(), чтобы прочитать выходные данные и выходные данные ошибки процесса.

1 голос
/ 20 января 2011

В Windows вы можете использовать rundll:

Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +  
    "\Path\to\File.lnk");
0 голосов
/ 12 марта 2017

Или вы можете использовать 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, так как некоторые из них являются копиями с моего старого ПК ...

0 голосов
/ 20 января 2011

Java не поддерживает определенные функции ОС, но java.awt.Desktop.open должен делать.

...