8

我有一个实用程序,它通过简单地复制/替换可执行文件来更新应用程序。现在,我有一些 DLL 文件也需要更新。但是,有时 Windows 不会让我替换它,因为某些东西正在使用它,有时使用 DLL 的东西太多,我不能保证它会被我解锁来替换它。

目前,我唯一的解决方法是先重命名现有的 DLL,然后我可以复制新的 DLL。但是,旧的 DLL 会留下一个更改的文件名。

在这种情况下,如何以编程方式替换 DLL?

4

1 回答 1

14

您的方法很好 - 只需重命名文件并将新的 DLL 复制到正确的位置。完成后,您可以使用 Windows API 函数MoveFileEx注册旧文件,以便下次重新启动机器时删除。从 MSDN 文档:

如果 dwFlags 指定 MOVEFILE_DELAY_UNTIL_REBOOT 并且 lpNewFileName 为 NULL,则 MoveFileEx 注册 lpExistingFileName 文件,以便在系统重新启动时删除。如果 lpExistingFileName 引用一个目录,则系统仅在目录为空时才会在重新启动时删除该目录。

所以你会想做这样的事情:

MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);

我没有与 Delphi 合作太多。假设您可以导入正确的 Windows API 函数并直接从 Delphi 进行此调用,或者编写一个小的 C++ 程序,您可以调用它来为您处理这个问题。

于 2013-01-25T21:07:10.823 回答