在 Windows / C# 中卸载 DLL

Posted

技术标签:

【中文标题】在 Windows / C# 中卸载 DLL【英文标题】:Unloading DLL in Windows / C# 【发布时间】:2018-04-06 16:03:38 【问题描述】:

我有一个硬件,制造商为此提供了一个 DLL 和一个示例 Visual Studio 项目。

我基于这个项目写了一个工具,使用最新版本的DLL,运行良好。

现在,还有其他(旧)工具使用其他版本的 DLL。这些工具也可以单独运行。

当我运行这两个工具(又一个,不是同时!)而没有在两者之间重新启动 Windows 时,就会出现问题。

然后我收到“版本不匹配”错误。我怀疑 Windows 仍然保持加载 DLL,尽管首先运行的程序正确终止。

由于我无法访问“其他工具”的源代码,有什么办法

    在我的程序启动时强制使用正确版本重新加载 DLL 和; 当我的程序退出时强制 Windows 卸载 DLL

所以不会有任何问题?

【问题讨论】:

是项目中的引用吗?如果是这样,请查看其属性。每个项目是否正确引用了不同的 dll?如果是这样,那么“特定版本”是否设置为true?这可能就是您所需要的。 【参考方案1】:

由于您没有这些其他工具的源代码,因此您必须为要使用的每个使用此 dll 版本的应用程序创建一个清单文件。这将是一个与可执行文件同名的文件,扩展名为“.manifest”。您可以在此处找到有关应用程序清单的更多信息:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa374191%28v=vs.85%29.aspx

一旦你有了清单文件,你就可以指定它需要加载的确切 dll,例如:

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" 
                        name="Proseware.Research.SampleAssembly" 
                        version="6.0.0.0" 
                        processorArchitecture="X86" 
                        publicKeyToken="0000000000000000" 
                        language="*"
      />
    </dependentAssembly>
  </dependency>

【讨论】:

以上是关于在 Windows / C# 中卸载 DLL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 或免费 XP 工具卸载或删除 Windows XP Sp3 游戏?

如何在 c# 中使用其产品代码卸载 MSI

C#打包时如何添加卸载程序????

c# windows service 通过bat文件来安装和卸载自己写的服务

c# winform程序.在控制面板中调整了DPI设置显示异常

运行 Windows 卸载程序时关闭应用程序