java - 从内存创建进程

时间:2012-05-16 13:20:31

标签: java windows process zip

假设无盘状况,我如何(在Java中)从内存中解压缩的exe(以及相应的支持文件)创建进程?

我已经看到解压缩到内存herehere但是找不到从byte []或InputStream创建进程的方法,即没有(filesystem)命令字符串。

想法是在Java应用程序/项目中捆绑第三方组件,而不允许它独立使用,因此将其捆绑在受密码保护的Zip中。在我的程序执行期间,它将解压缩到内存(exe +支持文件)并为后面的OutputStream写入做好准备,如:

Process process = ?
OutputStream output = process.getOutputStream();
...
output.write("my commmand to 3rd party component");

任何提示?

提前致谢,

2 个答案:

答案 0 :(得分:0)

我可以看到几种可能的方法:

  1. 解压缩到内存中的文件系统。
  2. 编写一个自定义class loader,直接从ZIP文件加载类。
  3. 在这两者中,第一部分可能需要较少的工作。

答案 1 :(得分:0)

Windows要求进程映像驻留在操作系统可见的文件系统上。这意味着您需要具有解压缩EXE的“磁盘”(确切地说,是内核模式驱动程序公开的系统范围的可见文件系统)。

我们提供了几种产品,可用于创建适合从中启动EXE的虚拟文件系统,但在所有这些产品中,都需要安装内核模式驱动程序。这就是Windows的设计工作方式。

因此,仅仅从流中运行本机EXE(以PE格式)将不起作用。 .NET程序集可以在内存中加载,也可以使用Java运行时功能从任何地方加载Java类,但对于本机进程则不然。