使用 MediaInfo.dll 的 C# 发布应用程序

标签 c# dllimport mediainfo

我构建了一个程序,它将使用 MediaInfo.dll 读取 mkv 文件的一些视频和音频信息。

从源代码运行时,该程序运行完美,并将 dll 放置在 bin 文件夹中。

现在我想发布我的应用程序并能够继续使用它。不再找到 MediaInfo.dll 库。我尝试将其放在 C:\WIndows\C:\Windows\system32 中,但没有成功。如果我运行安装程序(发布后),程序将安装在同一位置(我不想要这个,但这是另一个问题)。我也尝试将 dll 放入该文件夹中。

引发错误的代码是:

try{
  Handle = MediaInfo_New();
}
catch (Exception ex){
                Handle = (IntPtr)0;
Console.Out.WriteLine(ex.ToString());
}

抛出的错误是System.BadImageFormatExceptionSystem.DllNotFoundException:无法加载DLL“MediaInfo.dll”

知道在哪里放置 dll 吗?

最佳答案

您需要将 DLL 部署到复制 EXE 的同一目录。

您遇到了 BadImageFormatException 问题,并且看不到 c:\windows\system32 工作,因为您正在启动 64 位版本 Windows 的计算机上部署程序。但是,您的程序无法在 64 位模式下运行,您依赖于 32 位 native 代码。您需要通过强制程序在 32 位模式下运行来解决这个问题。右键单击您的 EXE 项目,属性,构建选项卡,将平台目标设置更改为 x86。将DLL复制到Windows目录确实是个坏主意,但在这样的机器上它是c:\windows\syswow64。 始终倾向于本地部署,与 EXE 位于同一目录。

如果在此之后您仍然遇到 DllNotFoundException 问题,那么可能的问题是 MediaInfo.dll 本身依赖于另一个 DLL。这很常见,存储 C 运行时的 DLL 是一个非常常见的依赖项。如果您不知道这可能是什么 DLL,那么您可以使用 SysInternals 的 ProcMon 实用程序。您将看到程序搜索 DLL 但找不到它。

关于使用 MediaInfo.dll 的 C# 发布应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184713/

相关文章:

c# - .NET Framework 4.5 上的意外加速

c# - 流读取问题

c# - Silverlight 中的三态按钮

android - 可以转换或流式传输 (Android-Chromecast) 本地文件吗?

windows - 如何使用 MediaInfo 将视频文件的帧率和流计数信息转换为文本文件?

c# - 获取类库中的当前目录

c# - 如何使用 WCHAR* 在消息框中显示来自 C# 的 C 函数

c - 如何使用 Visual Studio 2010 为 64 位编译 C DLL?

c# - 在 C# DllImport 中使用 32 位或 64 位 dll

video - 如何使用 ffmpeg 正确降低 360 视频的分辨率?