【问题标题】:Unable to run c#application (using c++ dll) in some PCs无法在某些 PC 中运行 c#application(使用 c++ dll)
【发布时间】:2011-02-14 13:21:52
【问题描述】:

我们创建了一个调用 c++ dll(sdbm.dll) 的 c# 应用程序。它在除某些 PC 之外的大多数 PC 中都能正常工作。该dll是使用VC++ 2008创建的,应用程序是在VC# 2005中完成的。以下是从C#应用程序调用dll函数时出现的错误。

一台PC发生的错误如下

=======================================

无法加载 sdbm.dll:由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题(HRESULT 异常:0x800736B1)

第二台电脑发生错误

=======================================

错误签名

Appname:app.exe Appver:1.0.0.0 Modname:msvcr90.dll Modver:9.0.30729.4148 Offset:0002fc96

任何帮助将不胜感激

【问题讨论】:

  • 查看电脑的Application EventLog。
  • 不同系统上的 MSVC 运行时库是否存在问题?
  • 可能它也可能与可视化 c++ 可再发行组件有关

标签: c# c++ visual-c++


【解决方案1】:

正如其他人在他们的评论中已经指出的那样,您的 sdbm.dll 的依赖项似乎存在问题。找出根本原因的最简单方法是获取DependencyWalker 的副本并将sdbm.dll 放入其中。首先在没有任何问题的机器上运行,然后在其中一台有问题的机器上启动 DependencyWalker 以查看它的输出。

它为您提供了一些有关在当前机器上找不到的 DLL 的信息。带你去有问题的图书馆。

问题几乎总是缺少 Visual C++ Redistributable Package(200520082010),或者您的库已编译并部署为调试版本。在这种情况下,它将链接到例如的调试版本。 mfcxx.dll 通过使用 mfcxxd.dll。但这些调试版本仅与相应的 SDK(或 Visual Studio)一起安装,而不与再分发包一起安装。因此会导致用户机器出现问题,但不会导致开发人员机器出现问题。

【讨论】:

  • 在第一台PC上安装Visual C++ Redistributable Package后,问题就解决了。但是在第二台 PC 中它不起作用,并且在依赖 walker 中它也没有给出任何错误。
  • @user616243:对于第二台电脑,我没有真正的想法。一种可能性可能是注入器 dll(来自 av 程序或病毒)或必须通过 manifest 文件 配置的东西(但我对此没有任何经验)。或许this question可以帮助你深入挖掘。
  • c++ dll(sdbm.dll) 正在尝试启动与系统的 SSL 通信。确保这次 C# 应用程序崩溃了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多