【发布时间】:2009-02-24 00:57:27
【问题描述】:
有人知道如何将 exe 文件嵌入到 dll 中吗?
我有一个工具,它是我从 c# 代码调用的 exe 文件。
问题是我想要 1 个包含此工具(exe 文件)的 dll 和包含我的 c# 代码的 dll。
是否可以在资源中嵌入这个 exe 文件?
提前谢谢
【问题讨论】:
-
我删除了“嵌入式”标签,因为这个问题与嵌入式系统并不真正相关。
有人知道如何将 exe 文件嵌入到 dll 中吗?
我有一个工具,它是我从 c# 代码调用的 exe 文件。
问题是我想要 1 个包含此工具(exe 文件)的 dll 和包含我的 c# 代码的 dll。
是否可以在资源中嵌入这个 exe 文件?
提前谢谢
【问题讨论】:
确实如此。您可以在应用程序中将任何文件添加为 RC_DATA 作为资源。但我相信你需要先把它解压到磁盘才能调用它!
您使用的是哪种 IDE/语言?
[编辑]
对不起!你确实提到你正在使用 C#。
【讨论】:
值得一提的是,您的用户可能对您这样做不太满意。将他们无法控制的可执行文件嵌入到您将提取并运行的 DLL 中可能会让人们担心在他们的机器上运行木马。
最好将 .EXE 留在文件系统中,并对应用程序的操作保持透明。
【讨论】:
您可以从 byte[] 加载程序集。这可以通过嵌入资源的 ManifestResourceStream 获得。
【讨论】:
另一种方法可能是不嵌入 .exe 本身,而是将其功能包含在 dll 中,并使用 rundll32[1] 来执行它。
【讨论】:
附带说明,请记住,当您将文件从资源中提取到磁盘然后在其上执行代码时,您可能会触发 Windows Data Execution Prevention - 基本上,Windows 会尝试自动检测某些内容是否应该是代码或数据,如果它看起来像数据(资源会这样),那么它将阻止该数据作为代码执行。
如果要通过网络而不是本地驱动器使用 .NET 程序集,这将成为一个特别棘手的问题 - 有各种 .NET 安全配置可能会阻止它正常工作。
另一种选择,不知道你的项目的细节,带着一粒盐:在你的安装中添加一个 .exe.readme 文件,向任何好奇的用户或 IT 人员描述为什么他们没有可执行文件' t期望在安装目录中:)
【讨论】: