运行.exe快捷方式的Java代码

运行.exe快捷方式的Java代码,java,process,runtime.exec,ioexception,Java,Process,Runtime.exec,Ioexception,有什么方法可以从快捷方式打开记事本或其他应用程序吗 这是我的密码: import java.io.File; import java.io.IOException; public class acrobat { public static void main(String[] args) throws IOException, InterruptedException { String[] notepad = {"C:\\Users\\Desktop\\notepa

有什么方法可以从快捷方式打开记事本或其他应用程序吗

这是我的密码:

import java.io.File;
import java.io.IOException;

public class acrobat {

    public static void main(String[] args) throws IOException, InterruptedException {
         String[] notepad = {"C:\\Users\\Desktop\\notepad.lnk"};

         Process p = Runtime.getRuntime().exec(notepad);
         p.waitFor();
    }
}
我想从快捷方式打开应用程序,但出现错误

    Exception in thread "main" java.io.IOException: Cannot run program "C:\Users\robert\Desktop\notepad.lnk": CreateProcess error=193, %1 is not a valid Win32 application
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at acrobat.main(acrobat.java:11)
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 4 more
线程“main”java.io.IOException中的异常:无法运行程序“C:\Users\robert\Desktop\notepad.lnk”:CreateProcess错误=193,%1不是有效的Win32应用程序 位于java.lang.ProcessBuilder.start(未知源) 位于java.lang.Runtime.exec(未知源) 位于java.lang.Runtime.exec(未知源) 在acrobat.main(acrobat.java:11) 原因:java.io.IOException:CreateProcess错误=193,%1不是有效的Win32应用程序 在java.lang.ProcessImpl.create(本机方法) 位于java.lang.ProcessImpl。(未知源) 位于java.lang.ProcessImpl.start(未知源) ... 4更多
如果我只写notepad.exe比它的工作,但与路径它不工作。有什么方法可以用快捷方式打开吗?

您在桌面上看到的快捷方式实际上是一个扩展名为
.lnk
的文件。真正的完整路径是:

C:\Users\Desktop\notepad.exe.lnk
尝试通过
exec()
运行它将产生“CreateProcess错误…不是有效的Win32应用程序”错误


幸运的是,您还可以通过utility类运行这些

public static void main(String[] args) throws Exception {
  ProcessBuilder pb = new ProcessBuilder("cmd", "/c",
                                      "C:\\Users\\robert\\Desktop\\notepad.lnk");
  Process p = pb.start();
  p.waitFor();
}


如果必须使用
Runtime.getRuntime().exec()
,则可以通过
rundll32
打开
lnk
文件:

Process p = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +
                                      "C:\\Users\\robert\\Desktop\\notepad.lnk");
p.waitFor(); // watch out
但是请记住,通过这种方法,
p.waitFor()
和类似的方法调用可能没有预期的结果:正如您所看到的,创建的进程是
rundll32
,而不是快捷方式(
notepad.exe
查看和关联的方法

  • 打开文本文件的默认编辑器比加载“裸”程序更有意义
  • 它将适用于存在文件关联的所有文件
  • 它将在OSX和*nix上工作
  • 它不会疏远喜欢在TextPad、MS Word或..中编辑文本文件的用户

然而,如果你真的必须打开链接


阅读(并实施)的所有建议。这可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用的
exec
,并使用
ProcessBuilder
构建
流程。还可以将
字符串arg
分解为
字符串[]args
,以说明本身包含空格的参数。

快捷方式具有扩展名
.lnk
,这就是程序找不到指定文件的原因。
.exe
在程序文件夹中,
.lnk
将桌面快捷方式链接到程序文件夹中的可执行文件,在桌面上,您必须查找
记事本。lnk
打开控制台,转到路径,执行
dir
,您可以看到有哪些文件。因此,我尝试了,C:\\Users\\Desktop\\notepad.lnk它不工作,请帮助我,得到相同的错误!!反斜杠是对的。另一种方法是使用桌面API打开要编辑/生成的文件的默认应用程序。通过这种方式,用户可以打开他喜欢的软件,例如记事本+,而不是记事本。
C:\Users\Desktop\robert
C:\Users\Desktop
?通常在这样的路径中会有一个用户名。实际上,这个用户名不起作用!!我没有得到任何错误,但它没有打开记事本苏,请帮助我!!谢谢你到底试了哪一个?我两个都试了!!!!哈哈。。。。但我不知道为什么它不起作用!!:(它没有给我任何错误!!我编辑了问题。请再试一次:
ProcessBuilder pb=newprocessbuilder(“cmd”),“/c”,“c:\\Users\\robert\\Desktop\\notepad.lnk”);Process p=pb.start();p.waitFor();
我正试图从桌面打开Acrobat dist..,然后运行刚刚从桌面打开的Acrobat dist文件夹中的所有文本文件,完成后,关闭Acrobat dist,这就是我试图做的,我可以打开Acrobat dist,但不能从桌面打开,请帮助我!!谢谢!!@trashgod如果我想专门为Windows编写代码,我会使用。Net。我愿意打赌它能以一种可靠的方式实现这一点,使用2-3行代码。当被接受的答案被设计成一个健壮的版本时,它将至少有10-15行Java。或者更多,正如我从中回忆的那样。@trashgod,这让我想起了
BrowserLauncher
-人们会尝试用10-20行代码来实现,什么它在大约20KB的编译和Jar代码中可靠地运行。