有什么方法可以从快捷方式打开记事本或其他应用程序吗?
这是我的代码:
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
如果我只写notepad.exe而不是它的工作,但是路径不起作用。有什么方法可以用快捷方式打开吗?
答案 0 :(得分:7)
您在桌面上看到的快捷方式实际上是一个扩展名为.lnk
的文件。那真正的完整路径是:
C:\Users\Desktop\notepad.exe.lnk
尝试通过exec()
运行它会产生 “CreateProcess错误...不是有效的Win32应用程序” 错误。
幸运的是,您也可以通过ProcessBuilder
实用程序类运行它们。
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()
,则可以通过lnk
打开rundll32
文件:
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
)。
答案 1 :(得分:2)
查看Desktop.open(File)
及相关方法。
但是,如果你真的必须打开链接..
阅读(并实施)所有 When Runtime.exec() won't的建议。这可能会解决问题。如果没有,它应该提供有关失败原因的更多信息。然后忽略它引用exec
并使用Process
构建ProcessBuilder
。同时将String arg
分解为String[] args
以说明自身包含空格的参数。