以下行在我的Windows XP java应用程序中运行良好:
Process p = Runtime.getRuntime().exec("msg.exe * this is a test");
当它在Windows7(64位)上执行时,我得到以下错误:
无法运行程序"msg.exe":CreateProcess错误=2,系统找不到指定的文件
我试着输入.exe的完整路径,但我得到了相同的错误:
Process p = Runtime.getRuntime().exec("c:\Windows\System32\msg.exe * this is a test");
使用ProcessBuilder而不是Runtime会产生相同的错误:
Process p = new ProcessBuilder("msg.exe * this is a test").start();
我试图通过暂时让每个人都完全控制msg.exe来排除权限问题,但Windows不允许我这样做——即使我以管理员身份登录,选项也会变灰。
因此,我确认java进程的用户具有对msg.exe的读取和执行权限。
我能够从Windows7机器的命令行成功地运行该命令(作为java进程的同一用户)。
在这篇文章的注释中:C#找不到指定的文件,有人暗示了一个类似的问题,即Windows 64位计算机没有从C#程序中找到msg.exe,所以也许在Windows配置方面我需要做一些事情?
有没有办法让java应用程序在Windows7上发送网络消息?或者发送一条有效的网络消息的替代方案?
您可能安装了32位Java,这不允许在Windows7上启动64位程序。如果安装了32位Java,请升级到64位Java,然后重试。
请尝试:new ProcessBuilder("msg.exe", "* test").start()