Inno Setup-在安装过程中取消注册共享DLL

时间:2018-11-12 11:33:52

标签: inno-setup

另请参阅:

Deleting and unregistering DLL files during install using Inno Setup

Inno Setup: How to automatically uninstall previous installed version?

在我的Inno Setup脚本的[Files]部分中,有以下一行:

Source: {#InstallSource}\OldDll.dll; DestDir: {sys}; Flags: sharedfile regserver

应用程序的更新版本不再使用此DLL。我想在安装新版本时要做的就是减少此DLL的共享文件锁定计数,如果该数目为零,请注销并删除它。

最简单的方法是告诉用户在更新之前卸载应用程序的先前版本,但这将意味着各种配置设置也将被删除,并且用户将不得不手动重新输入它们。是否可以自动执行DLL注销/删除过程?

1 个答案:

答案 0 :(得分:2)

虽然您可以执行以下操作以注销并卸载DLL:

...它实际上会中断引用计数,因为它不会阻止您的卸载程序再次减少引用计数器。这是因为卸载程序remembers actions of all past versions of the installer将对其全部处理。

示例:如果您的DLL被应用程序和其他应用程序共享-2个引用。您运行更新,将计数器减少到1。然后卸载应用程序,将计数器减少到0,并删除DLL =>其他应用程序中断。


因此,最后唯一真正正确的解决方案是在安装程序的开头运行卸载程序。

请参见Inno Setup: How to automatically uninstall previous installed version?

您只能在共享文件仍然存在时有条件地执行此操作。


但是,事实证明,您实际上并不需要通过新版本的安装程序来卸载共享DLL。您只担心当新安装程序不再安装共享DLL时,其卸载程序也无法正确将其卸载。但这完全是出于第一部分中提到的原因。