将* .exe嵌入到dll中

时间:2009-02-21 14:22:28

标签: c# dll exe

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

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

问题是我想要1个dll包含这个工具(exe文件)和dll包含我的c#代码。

是否可以在资源中嵌入此exe文件?

提前谢谢

5 个答案:

答案 0 :(得分:9)

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

您使用的是哪种IDE /语言?

[编辑]

抱歉!你确实提到过你正在使用C#。

  1. 向您的应用程序添加资源文件(右键单击IDE中的应用程序,然后选择“添加新项目”。
  2. 使用资源编辑器中的工具栏添加现有文件。
  3. 然后在需要时通过调用代码来提取exe: System.IO.File.WriteAllBytes(@“C:\ MyEXE \”,Resource1.MyEXE);

答案 1 :(得分:7)

值得注意的是,您的使用可能对您这样做不太满意。将他们无法控制的可执行文件嵌入到您将提取和运行的DLL中,可能会让人担心在他们的计算机上运行特洛伊木马。

最好将.EXE保留在文件系统中,并对应用程序正在执行的操作保持透明。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

替代方法可能是不嵌入.exe本身,而是在dll中包含其功能,并使用rundll32 [1]来执行它。

答案 4 :(得分:-1)

另一方面,请记住,当您将资源从资源中提取到磁盘然后在其上执行代码时,您可能会触发Windows Data Execution Prevention - 基本上,Windows会尝试自动检测某些内容是否应该是代码或数据,如果它看起来像数据(资源会),那么它将阻止该数据作为代码执行。

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

另一个选项,并且不知道项目的详细信息,需要考虑到这一点:在您的安装中添加一个.exe.readme文件,向任何好奇的用户或IT人员描述为什么有可执行文件他们不是'期待在安装目录中:)