1

我需要在java中执行一个.lnk文件(指向exe文件的lnk文件)。我能怎么做?

在 vb .net 我做

Process.Start(path)

它有效

谢谢你的帮助。

4

4 回答 4

6

使用ProcessBuilder

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

调用process.getInputStream()process.getErrorStream()读取进程的输出和错误输出。

于 2011-01-20T16:33:17.330 回答
1

在 Windows 上,您可以使用rundll

Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +  
    "\Path\to\File.lnk");
于 2011-01-20T16:32:10.780 回答
0

Java 不支持操作系统特定的功能,但 java.awt.Desktop.open 应该支持。

于 2011-01-20T16:31:04.600 回答
0

或者您可以使用 ProcessBuilder... 但它需要一个实际 rundll32 的路径。我做到了,同时试图在我的小“分层发送到”应用程序中对一个奇怪的错误进行排序。

(我讨厌 Windows,XP 后“扁平化”,“发送到”选项中的链接指向一个愚蠢的列表;作为一棵树,我可以更好地导航我在系统上使用的 40 个奇怪的小选项)

这是调用链接(或任何类型的文件)的操作代码:

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()
// )
;

但是,通过 Java 调用 windows .lnk 的整个过程会产生相当混乱的结果。

直接链接到 x.jar 可能会使用系统 Java VM 打开 jar,但直接链接到已安装的 jre/bin/javaw.exe -jar "x.jar" 可能会失败,并显示“Windows 找不到文件“ 信息。

这一点,而另一个以完全相同的方式调用的 jar 将完美地执行。

不过,我可能不得不查看 .lnk 的备用流,因为有些是我旧 PC 的副本......

于 2017-03-12T11:31:50.480 回答