我一直在尝试将它从网上下载.exe文件,读取它,然后在本地写入文件,然后执行。
URL url = new URL("http://www.ddlands.com/downloads/Calc.exe");
URLConnection c = url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
String line = "";
File file = new File("analbread"+".exe");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
while((line = br.readLine()) != null){
bw.write(line + "\n");
}
br.close();
bw.close();
Process r = Runtime.getRuntime().exec("analbread" + ".exe");
System.out.println(r.toString());
System.out.println("WORKS!");
虽然我知道由于使用BufferedWriter而无效,但我不确定它是否运行exe。
答案 0 :(得分:2)
对于下载部分,您需要使用二进制读/写。有关详细信息,请参阅此处:Working unbuffered streams。
对于执行部分,问题是Runtime.exec()
-method无法启动您的可执行文件。
至少在Linux下(我无法在Windows上测试),您需要可执行文件的完整路径(或当文件与您的应用程序位于同一目录时使用./[file]
)能够执行它。
仅授予该命令适用于属于系统PATH-variable的可执行文件。
答案 1 :(得分:0)
查看ClickOnce:http://en.wikipedia.org/wiki/ClickOnce 我们成功地使用了它。
答案 2 :(得分:0)
我已经使用以下方法获得了良好的结果来运行命令行脚本。您可以创建运行可执行文件的批处理脚本,也可以使用exec方法直接运行它 - 可能会传递“cmd”。这将打开一个命令提示符,您可以从中运行任何内容。
public static void runScript(String batchFile, boolean waitForExit0, int retryTime)
{
try
{
String runString = "cmd /c start " + (waitForExit0?"/wait ":"") + "/MIN " + batchFile;
Process p = Runtime.getRuntime().exec(runString); // /c start /wait
while (true)
{
try
{
int exit = p.exitValue();
if (exit == 0)
{
System.out.println("completed: " + runString);
return;
}
}
catch(Exception e)
{
String s = "";
}
Thread.sleep(retryTime);
}
}
catch(Exception e)
{
String s = "";
}
}