【问题标题】:injecting dll into exe file将dll注入exe文件
【发布时间】:2010-04-03 00:08:52
【问题描述】:

我想在一台装有 windows xp 且没有 .net 框架且没有 c++ 库的计算机上执行一个用 VC++.net 2008 编写的 exe 文件。 但是当我运行文件时,我得到了这个错误:

This application has failed to start because the application configuration is incorrect....

我想要一种将所有依赖项放在一起以摆脱这个问题的方法。 有谁知道我该怎么办?

【问题讨论】:

    标签: .net c++ visual-c++


    【解决方案1】:

    如果您正在编写纯 C++ 应用程序(仅限 Win32,没有 .NET),那么您希望静态链接 C++ 运行时,可以在项目的属性中进行更改。有关说明,请参阅this answer。 (VC2005用,VC2008步骤相同)

    【讨论】:

      【解决方案2】:

      您似乎在寻找 .Net 链接器,例如 this one

      【讨论】:

      • 如何在 VS2008 中设置项目使用我的 dll 而不是我的系统 dll?
      • 对于没有第三方软件的 .Net 项目,您不能这样做。
      • 我对使用.net 并不认真,我只想使用Windows 功能。你知道其他可以解决我问题的环境吗?
      【解决方案3】:

      您有两个基本选择:要么用纯 C++(或其他可以/将产生完全独立的可执行文件的语言)编写程序,要么使用依赖遍历器来查找所需的 DLL,并将它们打包成一个安装程序。

      您建议的选项(采用依赖于某些 DLLS 的现有可执行文件,并尝试将 DLL“注入”到可执行文件中)几乎不可行。理论上,您可以(例如)将安装程序创建为可执行文件,并让用户在每次想要运行您的程序时重新运行安装程序。这通常会增加足够的开销,您的用户可能不会喜欢它。

      同样,您可以将 DLL 作为二进制资源放入可执行文件中,并使用FindResourceLoadResource 等将其内容写入临时文件——但这需要一些半高级编程,而且它仍然会产生相当大的开销。

      【讨论】:

      • 有什么办法可以将我的 dll 放在我的可执行文件附近并能够使用它们?
      • @JGC:是的——如果你把它们复制到与可执行文件相同的目录中,系统将能够找到它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多