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
更新: 我敢肯定,这必须有可能以某种方式。 如果我们认为这是一个执行:首先,它读取一个文件,然后完全加载到内存中...... 我没有看到,因为它不能单独执行此操作。
一般来说,你想要的是不可能的。系统链接器需要链接二进制文件并在它执行之前加载它,并且在大多数情况下(几乎每一个我知道的和可视的Windows/Linux),这意味着您将需要文件系统上的文件。
当然 - 你可以在那里写下它,也许写到一个临时目录中,作为一个文件执行它,然后再删除它。
即使您使用纯C编写代码,您也无法轻松做到这一点。
(警告 - 在Windows上,/可/在理论上带有.com格式的可执行做,但对格式的严格限制,使其过时。)
在Linux上,您也可以尝试定位系统加载器二进制文件,然后执行,通过管道将整个二进制文件传递给它。这是可行的,因为它的功能是一种“二进制解释器”。但我不会推荐这种方法。
也许我正在理解你以完全错误的方式提出的问题,但是如果你想要实现的是有一个“私人”.exe“文件”,那么你应该把它作为一个资源。 jar',我想你想生成,然后将它解压缩到一个临时文件夹,对用户来说是“隐藏的”,并使用一个简单的进程调用它,然后在完成时删除该文件,而不从未释放锁用户无法访问它,但所有这些都是针对“懒惰”用户的,您必须明白,如果有人真的想访问该exe文件,他们会这么做,这就是Window仍然如此轻易被盗版的原因:,所有这些都是为了创建一个只能在windows上工作的java应用程序,因此您需要在* NIX中添加另一个“库/应用程序”来为您做这件事(如果y ou想要添加对多个系统的支持)
这究竟是什么,你正试图实现这个,什么*它的目的是防止用户访问文件winmine.exe *意味着,访问它如何,因为我知道你只是想执行'.exe'文件,为什么你需要它成为一个Byte数组呢? – Ordiel
我想分发PDF文件,但用户无法直接打开它。 – josepmra
要打开文件有[Desktop.open(文件)](http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html#open(java.io.File))。现在,你的PDF在哪里? – Raffaele