2009-02-21 92 views
6

有人知道如何将exe文件嵌入到dll中吗?将a * .exe嵌入到dll中

我有一个工具,它是从c#代码调用的exe文件。

事情是,我想有一个DLL包含这个工具(EXE文件)和包含我的C#代码的DLL。

是否有可能将此exe文件嵌入到资源中?

Thx预先

+0

我删除了“嵌入”标签,因为这个问题并没有真正涉及到嵌入式系统。 – 2009-02-23 16:13:32

回答

9

当然可以。您可以将任何文件作为RC_DATA添加到应用程序中作为资源。但我相信在调用它之前,您需要首先将其解压到磁盘上!

您正在使用哪种IDE /语言?

[编辑]

对不起!你确实提到你在使用C#。

  1. 添加资源文件,你的应用程序(右IDE单击应用程序,选择“添加新项”。
  2. 使用资源编辑器中的工具栏添加一个现有的文件。
  3. 然后将解压后的exe时 System.IO.File.WriteAllBytes(@ “C:\ MyEXE \”,Resource1.MyEXE)通过调用代码类似要求;
+1

除了可以从一个字节[]加载程序集外,规则都可以使用,因此不需要创建该文件。 – leppie 2009-02-21 15:09:14

+0

相同的规则,....(哎呀错字) – leppie 2009-02-21 15:10:03

+0

thx为您的答案 所以最后,我需要写在文件系统上执行它呢?没有这样做就没有可能执行它? – GillouX 2009-02-21 18:49:18

7

值得霸菱记住,你的应用可能不会太很高兴你这样做。将他们无法控制的可执行文件嵌入到要提取并运行的DLL中可能会让人担心在他们的机器上运行木马。

将.EXE保留在文件系统中并对您的应用程序正在做什么保持透明会更好。

2

您可以从byte []加载程序集。这可以通过嵌入资源的ManifestResourceStream获得。

1

另一种可能是不嵌入.exe本身,而是在dll中包含它的功能,并使用rundll32 [1]来执行它。

-1

请注意,当您从资源中将文件拖到磁盘上,然后在其上执行代码时,您可能会触发Windows Data Execution Prevention - 基本上,Windows会尝试自动检测是否应该是代码或数据,如果它看起来像数据(资源会),那么它将阻止数据作为代码执行。

如果您的.NET程序集要通过网络而不是本地驱动器使用,那么这成为一个特别棘手的问题 - 有各种各样的.NET安全配置可能会阻止它正常工作。

另一个选择,不知道你的项目的细节,采取这一点盐:添加一个.exe.readme文件到您的安装,描述任何好奇的用户或IT人员为什么有一个可执行文件,他们没有期待在安装目录:)