Вложил * .exe в dll - PullRequest
       23

Вложил * .exe в dll

6 голосов
/ 21 февраля 2009

кто-нибудь знает, как я могу вложить exe-файл в dll?

У меня есть инструмент, который представляет собой исполняемый файл, который я вызываю из кода C #.

Дело в том, что я хочу, чтобы 1 dll содержала этот инструмент (exe-файл) и dll, связывающую мой код c #.

Можно ли встроить этот exe-файл в ресурсы?

Спасибо заранее

Ответы [ 5 ]

9 голосов
/ 21 февраля 2009

Конечно, это так. Вы можете добавить любой файл как RC_DATA в приложение в качестве ресурса. Но я полагаю, что вам нужно сначала извлечь его на диск, прежде чем вызывать его!

Какой IDE / язык вы используете?

[EDIT]

Извините! Вы упоминали, что используете C #.

  1. Добавьте файл ресурса в ваше приложение (щелкните правой кнопкой мыши приложение в IDE и выберите «Добавить новый элемент».
  2. Используйте панель инструментов в редакторе ресурсов, чтобы добавить существующий файл.
  3. Затем извлекайте exe при необходимости, вызывая код примерно так: System.IO.File.WriteAllBytes (@ "C: \ MyEXE \", Resource1.MyEXE);
7 голосов
/ 21 февраля 2009

Стоит помнить, что ваши пользователи могут быть не очень рады, что вы это делаете. Встраивание исполняемого файла, который они не контролируют, в DLL, которую вы извлекаете и запускаете, вероятно, заставит людей беспокоиться о запуске трояна на их компьютере.

Лучше оставить .EXE в файловой системе и быть прозрачным в отношении того, что делает ваше приложение.

2 голосов
/ 21 февраля 2009

Вы можете загрузить сборку из байта []. Это можно получить с помощью ManifestResourceStream встроенного ресурса.

1 голос
/ 23 февраля 2009

Альтернативой может быть не встраивание самого .exe, а включение его функциональных возможностей в dll и использование для его выполнения rundll32 [ 1 ].

0 голосов
/ 23 февраля 2009

Напомним, что когда вы извлекаете файл со своих ресурсов на диск и затем выполняете на нем код, вы можете вызвать Windows Предотвращение выполнения данных - в основном, Windows пытается автоматически определить, что-то Предполагается, что это код или данные, и если они выглядят как данные (что будет с ресурсом), то это предотвратит выполнение этих данных как кода.

Это становится особенно неприятной проблемой, если ваша сборка .NET будет использоваться по сети, а не с локального диска - существуют всевозможные конфигурации безопасности .NET, которые могут помешать правильной работе.

Другой вариант, не зная подробностей вашего проекта, принять это с большой долей соли: добавьте в вашу установку файл .exe.readme, который описывает любопытных пользователей или ИТ-специалистов, почему существует исполняемый файл, которым они не были ' ожидая в каталоге установки:)

...