gpt4 book ai didi

c# - 如何在其所有者进程退出时删除要删除的 DLL?

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:03 26 4
gpt4 key购买 nike

我有一个 .NET 程序集 DLL,它是根据数据库中的预编译代码即时创建的。有没有办法创建 DLL 文件,将数据放入其中,用 Assembly 类加载它,然后当进程退出时,是否删除该 DLL?

我的第一个想法是使用 FILE_SHARE_DELETE 标志打开它,使用 Assembly.LoadFrom, 加载它并自动删除它。

尽管 LoadLibrary 确实使用 FILE_SHARE_DELETE 标志打开文件,但当 DLL 仍映射到内存中时,操作系统不会删除该文件。

那么,在不使用AppDomains 或启动外部“目标进程退出后删除此文件”可执行文件(在运行时加载的 .NET DLL 取决于用户)的情况下,如何在进程退出时删除 DLL输入,所以这样做会涉及某种过程通信,我想避免这种情况)。

最佳答案

不,那行不通。 CLR 在 DLL 上创建一个内存映射文件 View ,在该 View 被销毁之前不能删除它。在卸载 AppDomain 之前不会发生这种情况。由于您可能正在主 AD 中加载它,因此在程序停止运行之前不会发生这种情况。

如果您不想使用 AD,我能想到的就是启动主进程并在其停止运行后删除 DLL 的辅助进程。

关于c# - 如何在其所有者进程退出时删除要删除的 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2421913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com