如何在关闭应用程序之前删除openssl dll

时间:2010-11-04 14:31:15

标签: delphi openssl indy

我制作了一个简单的工具(LogAndMailApplication),它将日志发送到我的gmail帐户,为此我使用了Indy组件TIdSSLIOHandlerSocketOpenSSL。要使用它需要ssleay32.dll和libeay32.dll。

因此,在应用程序启动时,我从exe资源中提取2 dll,然后将它们复制到应用程序文件夹中。

在关闭应用程序之前,所有indy组件都在我销毁的数据模块中。

在销毁数据模块后,我尝试删除dll,但我不能。

我刚刚使用了DeleteFile,但这对于我在应用程序退出时删除的所有其他文件(包括ini文件)非常有用。

我试图创建一个简单的exe,只删除2 dll并且它有效。所以问题是2 dll以某种方式锁定,直到LogAndMailApplication没有关闭,如何解决问题?

3 个答案:

答案 0 :(得分:5)

Indy在运行时动态加载OpenSSL DLL,然后默认情况下在app关闭之前不会卸载它们。如果要更快卸载DLL,则需要直接调用IdSSLOpenSSL.UnLoadOpenSSLLibrary()。这将卸载DLL并清理所有引用并分配与它们相关的对象。

答案 1 :(得分:3)

您可以执行以下操作:在代码的最后使用

FreeLibrary则(的GetModuleHandle( 'ssleay32.dll')); FreeLibrary则(的GetModuleHandle( '的libeay32.dll')); 的DeleteFile(PathToDLL1); 的DeleteFile(PathToDLL2);

这应该有效。

或者你可以摆脱OpenSSL并使用我们的SecureBlackbox中的SSL components

答案 2 :(得分:1)

或者,您可以删除数据模块单元的最终部分中的DLL ...