0

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

我已经看到在这里这里解压缩到内存,但找不到从 byte[] 或 InputStream 创建进程的方法,即没有(文件系统)命令字符串。

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

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

有什么提示吗?

提前致谢,

4

2 回答 2

0

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

  1. 解压到内存文件系统中。
  2. 编写一个自定义类加载器,它将直接从 ZIP 文件加载类。

在这两者中,第一个可能需要较少的工作。

于 2012-05-16T13:24:12.893 回答
0

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

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

So running the native EXE (in PE format) from just a stream unfortunately won't work. .NET assemblies can be loaded in/from memory, and Java classes can also be loaded from anywhere using Java runtime capabilities, but this is not so for native processes.

于 2012-05-16T14:16:47.890 回答