【发布时间】:2011-05-05 02:28:50
【问题描述】:
我制作了一个简单的工具 (LogAndMailApplication),可以将日志发送到我的 gmail 帐户,为此我使用了 Indy 组件 TIdSSLIOHandlerSocketOpenSSL。要工作,它需要 ssleay32.dll 和 libeay32.dll。
所以在应用程序启动时,我从 exe 资源中提取 2 个 dll 并将它们复制到应用程序文件夹中。
所有的 indy 组件都在我在关闭应用程序之前销毁的数据模块中。
销毁数据模块后,我尝试删除 dll,但无法删除。
我刚刚使用了 DeleteFile,但这对于我在应用程序退出时删除的所有其他文件(包括 ini 文件)都非常有用。
我尝试制作一个简单的 exe,只删除 2 个 dll 并且它可以工作。所以问题是2个dll被锁定了,直到LogAndMailApplication没有关闭,如何解决这个问题?
【问题讨论】:
-
如果 DLL 隐藏在可执行文件中,如果用户或管理员需要关键的安全补丁,他们如何用更新的版本替换 DLL?
-
他们不能,但这在这里没有意义。我只是给自己发一封电子邮件。我只在 3 个客户上安装它,所以现在它是可以管理的。
-
为什么需要删除 DLL?为什么不将它们保存在应用程序目录中,以便下次使用? (就此而言,你为什么不让安装程序把它们放在那里?)
-
如果您的应用程序将 dll 提取到应用程序文件夹中,则需要在启用 UAC(默认)的 vista 或更新的窗口上以提升的权限运行。正如 Rob 建议的那样,安装程序应该把它们放在那里。
-
好的。这只是一个快速而肮脏的工具,我不需要安装程序。