java - 如果使用 exec() 将外部应用程序定义为 Java 中的无效 Win32 应用程序,如何调用外部应用程序?
问题描述
我正在摆弄从 Java 源代码打开外部应用程序。我正在尝试为一个名为 Runescape 的游戏打开一个启动器,该游戏位于C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Jagex
. 此目录中的文件名为RuneScape Launcher.url
.
这是迄今为止展示我的进步的代码:
public static void main(String[] args) throws IOException, InterruptedException {
//doesn't work
Process p = Runtime.getRuntime().exec("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Jagex\\RuneScape Launcher.url");
//if Chrome was to be opened, it works, since it is .exe
// Process p = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
p.waitFor();
System.out.println(p.exitValue());
}
抛出的错误是:
Exception in thread "main" java.io.IOException: Cannot run program "C:\ProgramData\Microsoft\Windows\Start": 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 java.lang.Runtime.exec(Unknown Source)
at Main.main(Main.java:47)
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)
... 5 more
显然,RuneScape Launcher.url
不是一个有效的 Win32 应用程序。如何启动这样的应用程序?
我的研究: -这篇文章建议使用 ShellExecute,但它是用另一种编程语言编写的。我找不到类似的 Java 解决方案。-这篇文章讨论了调用外部应用程序时传递参数,但该外部应用程序是 .exe -此页面演示了调用外部应用程序,但同样只有 .exe
然后,我尝试从 cmd 手动启动这个启动器......成功。首先,我找到了启动器目录:cd C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Jagex
然后调用了启动器:"RuneScape Launcher.url"
。这正确启动了启动器。为什么不从 Java 代码开始?
解决方案
尝试将启动器作为参数传递给cmd.exe
:
Process p = Runtime.getRuntime().exec("cmd.exe", "/c", "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Jagex\\RuneScape Launcher.url");
推荐阅读
- python-3.x - python3 如何转换成我认为的 4 - '\x04'
- sed - 用 Sed 替换数字,将数字列表更改为 1 到 1000 可能重复的数字但只有 1 不是 11 或 2 但不是 22
- php - CRUD 要么编辑要么删除工作,一起会失败
- reactjs - React redux 状态未在生产构建中加载
- python - 更新 DynamoDB 中以 python 中的数字开头的属性
- flutter - 附加滚动控制器后如何调用事件
- postgresql - 如何仅针对表而不针对触发器和函数执行 pg_dump?
- c++ - C++ 创建一个输入流操纵器来屏蔽输出但保持所有输入不变
- html - 如何使用 jquery 获取 html 选择 > 选项标签自定义属性值?
- python - 删除 Pandas Dataframe 中的非等效多索引行