0

我一直在尝试使它可以从网络上下载 .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。

4

3 回答 3

2

对于下载部分,您需要使用二进制读/写。有关详细信息,请参阅此:工作无缓冲流

对于执行部分,问题是Runtime.exec()- 方法无法启动您的可执行文件。

至少在 Linux 下(我无法在 Windows 上测试它),您需要可执行文件的完整路径(或者./[file]当文件与您的应用程序位于同一目录时使用)才能执行它。

仅提供该命令适用于系统PATH-variable中的可执行文件。

于 2012-11-24T00:26:20.607 回答
0

看看 ClickOnce:http ://en.wikipedia.org/wiki/ClickOnce 我们已经成功地使用了它。

于 2012-11-24T00:19:19.353 回答
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 = "";
    }
}
于 2013-07-16T21:45:40.093 回答