我正在开发一个将非托管dll导入C#的应用程序。它有一个包装类,可以加载方法以便调用它。这些方法在dll程序中运行良好。我想添加保存正在使用的DLL的版本。我发现由于C# getting version of unmanaged dll我需要使用FileVersionInfo.GetVersionInfo(“my.dll”)。但是,在运行此函数时,它会发现无法找到“my.dll”的异常。 dll位于c:根目录下的文件夹中。此文件夹位于PATH中,根据http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx#search_order_for_desktop_applications,它应该找到它。
知道my.dll文件已加载并且工作原因为什么我也不能在同一个包装器类中调用GetVersionInfo()并找到my.dll所以我可以得到相同文件的版本号?感谢您的帮助,因为我一直在寻找几天。
答案 0 :(得分:1)
从MSDN,GetVersionInfo的参数是:
要检索版本的文件的完全限定路径和名称 。的信息。
所以非常清楚。你需要传递完整的路径,因为它似乎依赖于它。否则,它很可能会在当前目录中查找该文件(因此您的应用程序的目录)。
作为旁注,将本机DLL保存在C:\中是不好的做法。 您应该将其存储在应用程序的文件夹中。然后这个功能可以工作,你的应用程序将更自包含。磁盘周围没有文件传播。 当然,除非你有充分的理由将它存储在C盘的根目录中,否则这是真的。
答案 1 :(得分:1)
它需要完整路径,它不会搜索DLL。这样风险太大,DLL的Windows搜索规则是错综复杂的,需要配置。如果您需要在之前对任何函数进行调整,那么最好的方法是通过调整SearchPath()。如果将第一个参数设置为null,则使用与LoadLibrary相同的算法。
如果你需要在对一个函数进行微调后,那么最好的方法是使用加载的DLL。迭代Process.GetCurrentProcess()。模块以检索ProcessModule.FileName。