在Java中执行.lnk文件

发布于 2024-10-13 04:57:05 字数 150 浏览 9 评论 0原文

我需要在java中执行.lnk文件(指向exe文件的lnk文件)。我该怎么办?

在 vb .net 中,我这样做了

Process.Start(path)

,它可以工作,

谢谢你的帮助。

i need to execute a .lnk file in java (lnk file that points at an exe file). how can i do?

in vb .net i do

Process.Start(path)

and it works

thx you for help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

蓝天白云 2024-10-20 04:57:05

使用 ProcessBuilder

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

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

Use a ProcessBuilder:

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

Call process.getInputStream() and process.getErrorStream() to read the output and error output of the process.

幸福%小乖 2024-10-20 04:57:05

在 Windows 上,您可以使用 rundll

Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +  
    "\Path\to\File.lnk");

On Windows, you could use rundll:

Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +  
    "\Path\to\File.lnk");
微凉徒眸意 2024-10-20 04:57:05

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

Java has no support for OS specific features, but java.awt.Desktop.open should do.

森林散布 2024-10-20 04:57:05

或者您可以使用 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()
// )
;

然而,通过 Java 调用 Windows .lnk 的整个过程可能会产生相当混乱的结果。

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

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

不过,我可能必须查看 .lnk 的备用流,因为其中一些是我的旧电脑的副本......

Or you can use ProcessBuilder... but it will need a path to the actual rundll32.
I did it, while trying to sort an odd bug in my little "Hierarchic Send to" app.

(I hate that windows, post-XP "flatten", the links in the "Send to" option to a stupid list; as a tree, I could navigate better the forty odd small options that I use on my system )

Here is the code of the action calling a link (or whatever type of file):

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

However, the whole shenhanigan of calling a windows .lnk through Java can give pretty confusing results.

A direct link to x.jar may open the jar with the system Java VM, but a direct link to installed jre/bin/javaw.exe -jar "x.jar" may fail, with a "Windows can't locate the file" message.

This, while another jar called the exact same way will execute flawessly.

Though, I might have to look at the alternate streams of the .lnk, as some are copies from my old PC...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文