7

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

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

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

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

提前谢谢

4

5 回答 5

9

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

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

[编辑]

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

  1. 将资源文件添加到您的应用程序(在 IDE 中右键单击应用程序并选择“添加新项目”。
  2. 使用资源编辑器中的工具栏添加现有文件。
  3. 然后在需要时通过调用类似以下的代码来提取 exe: System.IO.File.WriteAllBytes (@"C:\MyEXE\", Resource1.MyEXE);
于 2009-02-21T14:28:19.523 回答
7

值得一提的是,您的用户可能对您这样做不太满意。将他们无法控制的可执行文件嵌入到您将提取并运行的 DLL 中可能会让人们担心在他们的机器上运行木马。

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

于 2009-02-21T14:35:51.487 回答
2

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

于 2009-02-21T15:08:07.150 回答
1

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

于 2009-02-23T16:21:23.307 回答
-1

附带说明一下,请记住,当您将文件从资源中拉到磁盘然后在其上执行代码时,您可能会触发 Windows数据执行保护- 基本上,Windows 会尝试自动检测是否应该是代码或数据,并且如果它看起来像数据(资源会这样),那么它将阻止该数据作为代码执行。

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

另一种选择,并且不知道您的项目的详细信息,对此持保留态度:在您的安装中添加一个 .exe.readme 文件,该文件向任何好奇的用户或 IT 人员描述为什么会有他们没想到的可执行文件安装目录:)

于 2009-02-23T16:57:27.310 回答