无法在某些 PC 中运行 c#application(使用 c++ dll)

Posted

技术标签:

【中文标题】无法在某些 PC 中运行 c#application(使用 c++ dll)【英文标题】:Unable to run c#application (using c++ dll) in some PCs 【发布时间】: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++ 可再发行组件有关 【参考方案1】:

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

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

问题几乎总是缺少 Visual C++ Redistributable Package(2005、2008、2010),或者您的库已编译并部署为调试版本。在这种情况下,它将链接到例如的调试版本。 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# 应用程序崩溃了

以上是关于无法在某些 PC 中运行 c#application(使用 c++ dll)的主要内容,如果未能解决你的问题,请参考以下文章

PySide2和pyinstaller gui应用程序将无法在某些Windows计算机上运行

某些 androids 应用程序无法通过 fiddler 连接

某些 androids 应用程序无法通过 fiddler 连接

CxFreeze 无法识别某些进口

不同版本设备的代码结构

使用 mfc 的 EXE(调试)无法在其他 PC 上运行