如何在EXE文件中包含我的程序依赖DLL(所以我只需要分发那个文件)?我正在使用C ++,所以我不能像通常用C#那样使用ILMerge,但有没有更简单的方法在Visual Studio中自动执行此操作?
我知道这是可能的(这就是安装程序工作的原因),我只是需要帮助指出最好的方法。
感谢您的时间。
答案 0 :(得分:3)
这种方法存在许多问题。例如,请参阅REAL Software的this post。他们的“REALbasic”产品曾经做过这样的事情并且遇到了问题,包括:
他们试图解决问题导致更多问题,包括崩溃。最终他们心软了,现在与应用程序并排分发DLL。
如果确实需要单EXE部署,并且由于某种原因无法使用安装程序,那么可靠的方法是静态链接所有依赖项。这假设您具有正确的.lib
s(而不仅仅是.lib
在DLL中的链接。)
答案 1 :(得分:1)
大多数安装程序使用zip文件(或类似的东西)来保存所需的任何文件。当您运行安装程序时,它会解压缩数据并将各个文件放在需要的位置(通常会添加注册表项,注册它安装的任何COM控件等)。
答案 2 :(得分:1)
有两种选择,两种选择都不太理想:
Nate在上面描述了第一种方法的缺点。第二种方法是可能的,但是很复杂(需要深入了解某些低级别的东西)并且不允许DLL代码访问DLL资源(这很明显 - 没有DLL的图像所以操作系统不知道在哪里拿资源)。
在某些情况下可以使用的另一个选项:创建一个虚拟磁盘,其内容存储在EXE文件资源中,然后从那里加载DLL。这可以使用我们的SolFS产品(操作系统版),但创建虚拟磁盘本身需要使用内核模式驱动程序,必须在使用前将其写入磁盘。