【发布时间】:2010-09-25 02:48:29
【问题描述】:
可能重复:
How can a C++ windows dll be merged into a C# application exe?
是否有人知道可以将多个 DLL 和一个 .EXE 打包到一个可执行文件中的程序。这里我说的不是 .NET 案例,我说的是通用 DLL,其中一些是我用 C++ 生成的,还有一些是我无法控制的外部 DLL。
我的具体案例是一个用py2exe打包的python程序,我想通过打包来“隐藏”另一个DLL。这个问题很笼统。
看过的东西:
- ILMerge:特定于 .NET
- NETZ:特定于 .NET
- UPX: 做了 DLL 压缩而不是多 DLL + EXE 打包
- FileJoiner:
几乎明白了。它可以将可执行文件 + 任何内容打包到一个 exe 中,但是当打开时,它将为每个打包的文件启动默认打开器。因此,如果用户用户 dll 依赖安装,它将启动它(因为这是默认的 dll 打开器)。
也许这不可能?
答案总结:
DLL 的打开是由操作系统管理的,因此将 DLL 打包成可执行文件意味着在某些时候,它们需要被提取到操作系统可以找到它们的地方。没有灵丹妙药。
所以,我想要的是不可能的。
除非……
我们更改了操作系统中的某些内容。感谢 Conrad 将我指向 ThinInstall,它虚拟化了应用程序和操作系统加载机制。使用 ThinInstall,可以将所有内容打包在一个 exe 中(DLL、注册表设置等)。
【问题讨论】:
-
你也可以使用 boxedapppacker - 类似于 thinstall。
-
或使用 BoxedApp SDK - 用于虚拟化文件和注册表的开发人员库
-
最近PELock更新了DLL绑定能力pelock.com/img/en/products/pelock/virtual-dll-libraries/…
-
我不认为这是重复的,因为源应用程序不像所谓的重复问题那样在 C# 中。还有另一种免费且简单的解决方案。 (至少它适用于我的简单项目。):See this answer on Superuser
标签: dll