我有一个实用程序,可以通过简单地复制/替换可执行文件来更新应用程序。现在,我有一些 DLL 文件也需要更新。然而,有时 Windows 不会让我替换它,因为有东西正在使用它,有时有太多东西使用该 DLL,我无法保证它会被解锁以供我替换它。
目前,我唯一的解决方法是首先重新命名现有的 DLL,然后我可以将新的 DLL 复制到其位置。但随后旧的 DLL 会被保留,并且文件名已更改。
在这种情况下,如何以编程方式替换 DLL?
你的方法很好 - 只需重命名该文件并将新的 DLL 复制到正确的位置即可。完成后就可以使用Windows API函数了移动文件Ex http://msdn.microsoft.com/en-us/library/windows/desktop/aa365240%28v=vs.85%29.aspx注册旧文件以便在下次机器重新启动时删除。来自 MSDN 文档:
如果dwFlags指定MOVEFILE_DELAY_UNTIL_REBOOT且lpNewFileName为NULL,则MoveFileEx注册系统重新启动时要删除的lpExistingFileName文件。如果 lpExistingFileName 引用一个目录,则仅当该目录为空时,系统才会在重新启动时删除该目录。
所以你会想做类似的事情:
MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
我与 Delphi 的合作不多。想必您可以导入正确的 Windows API 函数并直接从 Delphi 进行此调用,或者编写一个小的 C++ 程序,您可以调用该程序来为您处理此问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)