2015-05-04 6 views
0

У меня есть этот код, который копирует исполняемый файл в массив байтов.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

Update: Я уверен, что это должно быть возможно каким-то образом. Если мы считаем, что это выполнение: во-первых, он читает файл, а затем полностью загружает его в память ... Я не вижу, потому что он не может сделать это отдельно.

+0

Что именно вы пытаетесь достичь, это то, что делает * Цель этого - запретить пользователю доступ к файлу winmine.exe * означает, получить доступ к нему, потому что я понимаю, что вы просто пытаетесь выполнить файл .exe, почему вам нужно, чтобы это был массив байтов? – 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

ответ

1

То, что вы хотите, на самом деле невозможно. Системному компоновщику необходимо будет связать двоичный файл и загрузить его до его выполнения, а в большинстве (почти каждый из них, который я знаю и cetainly Windows/Linux), это означает, что вам понадобится файл в файловой системе.

Конечно, вы всегда можете записать его там, возможно, в каталог temp, выполнить его как файл, а затем удалить его позже.

Даже если вы писали в чистом C, вы не могли легко это сделать.

(Протест - В Windows вы/можете/в теории сделать это с форматом .com исполняемым Но серьезные ограничения в этом формате делают его устаревшим.).

В Linux, вы также можете попробовать размещение системы бинарный загрузчик и выполнить это, передав в него весь двоичный код через канал. Это работает, потому что он функционирует как своего рода «двоичный интерпретатор». Но я бы не рекомендовал этот подход.

0

Возможно, я понимаю, что вы просите совершенно неверно, но если вы пытаетесь добиться того, что у вас есть «частный» .exe-файл, возможно, вы должны поместить это как ресурс внутри. jar ', который, я полагаю, вы хотите сгенерировать, а затем извлечь его в временную папку «скрытый» для пользователя и вызвать ее оттуда с помощью простого вызова процесса, а затем, когда вы закончите, удалите этот файл, не освободив при этом блокировку что пользователь не может получить к нему доступ, но все это для «ленивого» пользователя, вы должны понимать, что если кто-то действительно хочет иметь доступ к этому exe, ОНИ УЙЛЛ, вот почему Окно все еще пиратски так легко, и все это для создания Java-приложения, которое работает только на окнах, поэтому вам нужно добавить еще одну «библиотеку/приложение», чтобы сделать это для вас в * NIX (в случае y ou хочу добавить поддержку для нескольких систем)