可能重复:
How can a C++ windows dll be merged into a C# application exe?
是否有人知道可以将多个DLL和.EXE打包到一个可执行文件中的程序。我不是在谈论.NET案例,我在谈论一般的DLL,其中一些我用C ++生成,其他一些是外部DLL,我无法控制。
我的具体案例是一个用py2exe打包的python程序,我希望通过打包来“隐藏”另一个DLL。但问题很普遍。
看过的东西:
几乎得到了它。它可以将可执行文件+任何东西打包到一个exe中,但是当打开它时,它将为每个打包的文件启动默认的opener。因此,如果用户用户dlldepend已安装,它将启动它(因为这是默认的dll开启器)。
也许这不可能?
答案摘要:
DLL打开由操作系统管理,因此将DLL打包成可执行文件意味着在某些时候,需要将它们提取到操作系统可以找到它们的位置。没有灵丹妙药。
所以,我想要的是不可能的。
除非......
我们改变了操作系统中的内容。感谢Conrad指向我ThinInstall,它虚拟化了应用程序和操作系统加载机制。使用ThinInstall,可以将所有内容打包在一个exe(DLL,注册表设置......)中。
答案 0 :(得分:6)
看看BoxedApp。祝你好运!
答案 1 :(得分:5)
看看 Thinstall ThinApp
答案 2 :(得分:4)
如果可执行文件静态链接到DLL,即没有调用LoadLibrary
,那么我认为没有任何机制将DLL打包到可执行文件中,因为DLL加载是由OS完成的在调用“main”函数之前的应用程序加载器。据我所知,解决这个问题的唯一方法就是将exe和dll放到另一个exe中。这个包装器exe将真正的exe和dll解压缩到一个临时文件夹中并启动exe,在exe退出时删除文件。
如果您要调用LoadLibrary/Ex
来加载dll,请在调用LoadLibrary/Ex
之前将exe资源中的dll提取到文件中。
真正的问题是LoadLibrary
函数在加载库时会对地址进行大量修复,只有在从文件加载时才能正常工作。
答案 3 :(得分:4)
试试Powerpacker。 Evalaze是另一种免费虚拟化解决方案。 Enigma Virtual Box免费版
答案 4 :(得分:1)
您可以在EXE中将DLL添加为二进制资源。在启动时,您的EXE可以将资源提取到临时文件夹中,并LoadLibrary()
生成的DLL。
答案 5 :(得分:1)
你看过我的廉价实用工具清单吗?
应该有几种廉价(即相当便宜)的工具 这会将非网络应用程序的DLL链接在一起,例如:
1。)Molebox Pro(eu 100) 2.)BitArt的Fusion(160美元) 3.)VB Wrap(100美元) 4.)PE捆绑(30美元)
此外,在“www.oreans.com”您可能会找到一个 针对eu 320的面向保护的程序包,那, 正如他们声称的那样,可以链接Win32或“。Net”文件 一起;但是,当我问他们具体的时候 scenarion,我会用他们的“XBundler For Win32 / .NET“为了打包”.Net“EXE,然后 会尝试在Windos 98上运行它(没有框架), 他们说这不行。 : - (
EXE Admirer
答案 6 :(得分:1)
你可以使用valgrid,thinstall或boxedapp .... 我更喜欢后者。
答案 7 :(得分:0)
MoleBox Pro完全符合您的要求,但它是共享软件,除非您购买完整版本,打包的可执行文件将在启动时显示一个对话框,说“此文件是由MoleBox的试用版打包的,请不要发布“
您可以在此处下载:link
不幸的是,我一直无法找到一个完全令人满意的免费解决方案
答案 8 :(得分:0)
我被告知有可能要求共享对象链接到另一个共享对象,因此在Linux中将它们组合成一个
但它对Windows本机dll不起作用,我发现的一件事是我们可以使用链接器将所有obj链接在一起,无论它们最初属于哪个项目。当然,他们需要有类似的链接选项。