【发布时间】:2015-04-07 21:54:52
【问题描述】:
我正在扩展我的 Inno-Setup 脚本,其中包含在托管 DLL 中最好用 C# 实现的代码。我已经知道如何将托管 DLL 中的方法导出为用于非托管进程的函数。这可以通过 IL weaving 来完成,并且有一些工具可以自动执行此操作:
所以在导出后,我可以在 Inno-Setup 安装程序中从 Pascal 脚本调用我的函数。但是还有一个问题:DLL 似乎无法再卸载了。使用 Inno-Setup 的 UnloadDLL(...) 无效,并且文件保持锁定状态,直到安装程序退出。因此,安装程序会等待 2 秒,然后无法从临时目录(或安装目录)中删除我的 DLL 文件。事实上,它确实会一直留在那里,直到有人清理驱动器。
我知道托管程序集不能再从 AppDomain 中卸载,除非整个 AppDomain 被关闭(进程退出)。但这对非托管主机进程意味着什么?
有没有更好的方法让 Inno-Setup 在加载和使用后卸载或删除我的 DLL 文件?
【问题讨论】:
-
顺便说一句,.NET 是 Windows 操作系统组件已有一段时间了,无论如何只支持最新版本。所以 .NET 应该已经存在,不应该消失,甚至可能被认为在 Windows 上无处不在。
标签: c# .net com inno-setup unmanaged