我尝试使用Java函数Runetime.exec(String)
在Windows 7计算机的启动文件夹中运行程序,如下所示:
Runtime.getRuntime().exec(runner.getPath() + "\\run.bat");
当我运行这个时,我收到错误,说该命令无法运行:
Exception in thread "main" java.io.IOException: Cannot run program ""C:\Users\ly
ndsey\AppData\Roaming\Microsoft\Windows\Start": CreateProcess error=2, The syste
m cannot find the file specified
正如您所看到的,文件名在" \ Windows \ Start"处被切断。什么时候它应该继续" \ Windows \ Startup \ run.bat" ..有没有我可以使用的替代方案?
答案 0 :(得分:1)
正如我从你给出的错误中看到的那样,我希望它是一个过去的副本,你出于某种原因字符串runner.getPath()
以“\”“开头和结尾”,这使整个路径无效。检查并删除如果需要的话
如果您已经拥有该文件,并且您只需要它的路径就可以使用
runner.getAbsolutePath()
另外,如果runner是文件,getPath
将为您提供包含路径的文件路径,因此您的代码肯定无法正常工作。改为使用:
String path = runner.getPath();
path = path.substring(0, path.lastIndexOf("\\")) + "\\run.bat";
Runtime.getRuntime().exec(path);
答案 1 :(得分:1)
作为替代方案,您可以使用ProcessBuilder
。我觉得ProcessBuilder
比Runtime.getRuntime().exec
http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html
String[] command = {"CMD", "/C", "dir"};
ProcessBuilder pb = new ProcessBuilder( command );
//set up your work directory if needed
pb.directory(new File("c:\\path"));
Process process = pb.start();
答案 2 :(得分:1)
将runner
视为文件实例,这应该可行。
Desktop.getDesktop().open(new File(runner, "run.bat"));
它使用Desktop
类而不是Runtime
,因此您不必将File
(转轮)转换为其String
表示(容易出错) 。 Runner现在“按原样”用作您要执行的“run.bat”的父目录。
Desktop
类的其他优点:您现在可以打开任何所需的文件。
答案 3 :(得分:0)
您应该避免exec(String)
方法,该方法尝试将整个字符串解析为命令+参数。安全选项是exec(String[])
,它预先假定第一个数组元素是命令,其余的是参数。
所以,写
Runtime.getRuntime.exec(new String[] { yourCommandString })
是获取正确信息的绝佳方式。