我需要在java中执行一个.lnk文件(指向exe文件的lnk文件)。我能怎么做?
在 vb .net 我做
Process.Start(path)
它有效
谢谢你的帮助。
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "C:\\temp\\file.lnk");
Process process = pb.start();
调用process.getInputStream()
和process.getErrorStream()
读取进程的输出和错误输出。
在 Windows 上,您可以使用rundll
:
Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +
"\Path\to\File.lnk");
Java 不支持操作系统特定的功能,但 java.awt.Desktop.open 应该支持。
或者您可以使用 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 的副本......