java-从内存创建进程

java-从内存创建进程,java,windows,process,zip,Java,Windows,Process,Zip,假设是无盘的情况,我(在Java中)如何从内存中解压的exe(和相应的支持文件)创建一个进程 我已经尝试过解压到内存,但找不到从byte[]或InputStream(即没有(文件系统)命令字符串)创建进程的方法 想法是将第三方组件捆绑在Java应用程序/项目中,而不允许独立使用,从而将其捆绑在密码保护的Zip中。在我的程序执行期间,它将被解压缩到内存(exe+支持文件),并为后面的OutputStream写入做好准备,如下所示: Process process = ? OutputStream

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

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

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

Process process = ?
OutputStream output = process.getOutputStream();
...
output.write("my commmand to 3rd party component");
有什么提示吗


提前感谢,

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

  • 解压缩到内存中的文件系统
  • 编写一个自定义文件,直接从ZIP文件加载类

  • 在这两种方法中,第一种可能需要更少的工作。

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

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


    因此,不幸的是,仅从一个流运行本机EXE(PE格式)是行不通的。NET程序集可以在内存中/从内存中加载,Java类也可以使用Java运行时功能从任何地方加载,但本机进程并非如此

    必须有某种内存文件系统,您可以将可执行文件写入其中,不是吗?您是在问如何执行外部程序吗?如果是这样,我认为方法2是不可能的,因为Peter要求执行“exe+支持文件”,这将提示Windows上的非Java可执行文件。这就只剩下Ramdisk方法了,没错,它是一个非java的第三方组件。我不知道ram文件系统,现在正在检查Apache Commons VFS。谢谢好的,谢谢。但是对于磁盘,我仍然需要使用受密码保护的zip文件的内容,而不将它们暴露在文件系统上(如果我将它们放在临时文件夹中,可能会有人找到它并将第三方组件作为独立组件使用)。是否有一个“标准”程序来执行此操作(在大多数“专业”应用程序和游戏中都是如此)?@Peterfialo使用我们的产品,您可以通过虚拟文件系统公开数据,但您可以将对文件系统的访问限制为仅系统进程,以便其他人无法访问。至于你的第二个问题,我不能评论一般的应用程序和游戏,但我还没有看到一个在磁盘上没有任何东西的情况下产生进程的游戏