从非托管进程卸载.NET DLL

ygo*_*goe 22 .net c# com inno-setup unmanaged

我正在扩展我的Inno-Setup脚本,其中包含我最好在托管DLL中的C#中实现的代码.我已经知道如何从托管DLL导出方法作为在非托管进程中使用的函数.它可以通过IL编织来完成,并且有一些工具可以实现自动化:

因此,在导出后,我可以在Inno-Setup安装程序中从Pascal脚本调用我的函数.但是有一个问题:DLL似乎不再被卸载了.使用Inno-Setup UnloadDLL(...)无效,文件将保持锁定状态,直到安装程序退出.因此,安装程序等待2秒,然后无法从临时目录(或安装目录)中删除我的DLL文件.事实上,它确实存在,直到有人清理驱动器.

我知道无法再从AppDomain卸载托管程序集,除非整个AppDomain关闭(进程退出).但是对于非托管主机进程意味着什么呢?

是否有更好的方法允许Inno-Setup在加载和使用后卸载或删除我的DLL文件?

zmb*_*mbq 0

虽然这不完全是您问题的答案,但您不能将 DLL 标记为在下次计算机重新启动时删除吗?

  • 如果我没记错的话,您应该将其添加为问题本身的评论 (9认同)