java执行在一个字节数组中的exe包装

问题描述:

我有这个代码将可执行文件复制到字节数组中。java执行在一个字节数组中的exe包装

//winmine.exe 
    Path path = Paths.get("winmine.exe"); 
    byte[] bin = Files.readAllBytes(path); 

我想在不使用文件的情况下执行数组。 例如我需要的是这样的:

Runtime app = Runtime.getRuntime(); 
    String currentDir = new File(".").getAbsolutePath(); 
    Process p = app.exec_WRAP_BINARY(bin); //Not exixts 

的这样做的目的是防止用户访问该文件winmine.exe

更新: 我敢肯定,这必须有可能以某种方式。 如果我们认为这是一个执行:首先,它读取一个文件,然后完全加载到内存中...... 我没有看到,因为它不能单独执行此操作。

+0

这究竟是什么,你正试图实现这个,什么*它的目的是防止用户访问文件winmine.exe *意味着,访问它如何,因为我知道你只是想执行'.exe'文件,为什么你需要它成为一个Byte数组呢? – Ordiel

+0

我想分发PDF文件,但用户无法直接打开它。 – josepmra

+1

要打开文件有[Desktop.open(文件)](http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html#open(java.io.File))。现在,你的PDF在哪里? – Raffaele

一般来说,你想要的是不可能的。系统链接器需要链接二进制文件并在它执行之前加载它,并且在大多数情况下(几乎每一个我知道的和可视的Windows/Linux),这意味着您将需要文件系统上的文件。

当然 - 你可以在那里写下它,也许写到一个临时目录中,作为一个文件执行它,然后再删除它。

即使您使用纯C编写代码,您也无法轻松做到这一点。

(警告 - 在Windows上,/可/在理论上带有.com格式的可执行做,但对格式的严格限制,使其过时。)

在Linux上,您也可以尝试定位系统加载器二进制文件,然后执行,通过管道将整个二进制文件传递给它。这是可行的,因为它的功能是一种“二进制解释器”。但我不会推荐这种方法。

也许我正在理解你以完全错误的方式提出的问题,但是如果你想要实现的是有一个“私人”.exe“文件”,那么你应该把它作为一个资源。 jar',我想你想生成,然后将它解压缩到一个临时文件夹,对用户来说是“隐藏的”,并使用一个简单的进程调用它,然后在完成时删除该文件,而不从未释放锁用户无法访问它,但所有这些都是针对“懒惰”用户的,您必须明白,如果有人真的想访问该exe文件,他们会这么做,这就是Window仍然如此轻易被盗版的原因:,所有这些都是为了创建一个只能在windows上工作的java应用程序,因此您需要在* NIX中添加另一个“库/应用程序”来为您做这件事(如果y ou想要添加对多个系统的支持)